#!/usr/bin/env ruby
# coding: utf-8

require 'cgi'
cgi = CGI.new(:accept_charset => "UTF-8")
param = cgi.params              # CGI変数は配列となる

mode = cgi['mode']
tatesize = cgi['tatesize']
yokosize = cgi['yokosize']
gpsza = cgi['gpsza']


maxsize = 2*1024**2             # 最大2MBまで受け付ける

thiscgi = "./"+File.basename($0)	# $0はこのスクリプトの起動名
# File.basenameでディレクトリ名を除去してファイル名のみになる
imgsrc = nil                    # 画像保存時のファイル名





print <<__END__
<html lang="ja">
<head>
<title>CMDSmap</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="../../../src/leaflet.css" />
<script src="../../../src/leaflet.js"></script>
<style type="text/css">
<!--
div#mymap {width: 90vw; height: 80vh; margin: 0 auto;}
 -->
</style>
</head>
<body>
__END__

def error(message)
  printf("<h1>失敗</h1>\n<p>%s</p>\n", message)
end

printf(<<-EOF)
<h1>写真埋め込み</h1>
<div id="mymap"></div>
<script type="text/javascript" src="geotag.js" charset="utf-8"></script>
EOF
#<p id="gps" name="msgjya"></p>

if mode == ""
  print <<__EOM__
<form method="POST" name="geotag" action="#{thiscgi}" enctype="multipart/form-data">
 <h2>画像選択</h2>
<input type="file" name="image">
<h3>位置</h3>
<p id="gps"></p>
<input type="hidden" name="gpsza" value="gpsjyo">
<input name="lati" length="100" size="100" value=""></p>
<input type="hidden" name="mode" value="decode"></p>

# <h2>リサイズ</h2>
# <p>縦</p>
# <input type="hidden" name="tatesize" value="tsize">
# <p><input name="tate" length="10"></p>

# <p>横</p>
# <input type="hidden" name="yokosize" value="ysize">
# <p><input name="yoko" length="10"></p>
# <input type="submit" value="OK">
# <input type="reset" value="リセット">
</form>
__EOM__
  # POSTされたら hiddenの変数 mode="decode" となる

else
  # POSTされたらこちらに来る
  image = cgi["image"]

  filename = image.original_filename
  ymd = Time.now.strftime("%Y年%m月%d日")
  now = Time.now.strftime("%S")

  if /\.JPG$/ =~ filename       # jpgとpngのみ処理
    imgsrc = "tmp/image#{now}.JPG"
  elsif /\.png$/ =~ filename
    imgsrc = "tmp/image#{now}.png"
  end

  # たくさんファイルが書かれると溢れるので最大60*2ファイルに制限
  # かつ、3分以上経過したファイルは次のコマンドで消す
  #### system "zsh -c '/bin/rm -f tmp/dummy tmp/*.*g(Nmm+3)'"


  if image.size > maxsize
    error("サイズが大きすぎます。(#{(maxsize/1024**2).to_s}メガバイト以内)")

  elsif imgsrc
    open(imgsrc, "w") do |i|
      i.write cgi['image'].read
    end
    message = CGI.escapeHTML(cgi["msg"].read)
    gpszahyo = CGI.escapeHTML(cgi["lati"].read)
    # tate = CGI.escapeHTML(cgi["tate"].read)
    # yoko = CGI.escapeHTML(cgi["yoko"].read)

    print <<__EOM__
<h1>#{ymd}にポストされた画像</h1>
# <p>縦#{tate}</p>
# <p>横#{yoko}</p>
<h1>#{gpszahyo}</h1>

<p class="c"><img src="#{imgsrc}" height="100"></p>
<p class="c">#{message}</p>
system "#{gpszahyo} tmp/image#{now}.JPG"

__EOM__
    
    if /\.JPG$/ =~ filename
      # system "mogrify -geometry #{tate}x#{yoko} tmp/image#{now}.JPG"
      system "#{gpszahyo} tmp/image#{now}.JPG"
      #system "/usr/koeki/bin/Perl5.10/#{gpszahyo} tmp/image#{now}.JPG"
      #system "#{message} tmp/image#{now}.JPG"
    # elsif /\.png$/ =~ filename
    #   system "mogrify -geometry #{tate}x#{yoko} tmp/image#{now}.png"
    #   system "#{gpszahyo} tmp/image#{now}.png"
    #   #system "#{message} tmp/image#{now}.png"

    end
    # 画像ファイルは作ったらすぐ消してしまう。
    #   fork {
    #    fork {
    #     STDOUT.close
    #    STDERR.close
    #   sleep 3
    #  File.unlink(imgsrc)
    # }
    # }
    # Process.wait
  else
    error("JPGかpngファイルのみ受け付けます")
  end
end

puts "</body>
</html>"
