# -*- coding: utf-8 -*-
#
# @file 
# @brief
# @author ongaeshi
# @date   2011/06/25

require 'rubygems'
require 'sinatra'
require 'haml'
require 'sass'

$LOAD_PATH.unshift '../..'
require 'milkode/cdweb/lib/database'
require 'milkode/cdweb/lib/command'
require 'milkode/cdweb/lib/mkurl'

set :haml, :format => :html5

get '/' do
  @version = "0.1.4"
  @package_num = Database.instance.fileList('').size
  @file_num = Database.instance.fileNum
  haml :index
end

post '/home*' do |path|
  path = path.sub(/^\//, "")

  case params[:shead]
  when 'all'
    path = ""
  when 'package'
    path = path.split('/')[0]
  end

  redirect Mkurl.new("home/#{path}", params).inherit_query_shead
end

get '/home*' do |path|
  before = Time.now
  path = path.sub(/^\//, "")
  record = Database.instance.record(path)

  if (record)
    view(record, params, before)
  else
    unless (params[:query])
      filelist(path, params, before)
    else
      search(path, params, before)
    end
  end
end

get %r{/help} do
  haml :help
end

# -- helper function --

helpers do
  # -- escape functions --
  alias h escape_html
  alias escape_url escape

  def escape_path(src)
    escape_url(src).gsub("%2F", '/')
  end
  
  # -- utility -- 
  def link(query)
    "<a href='#{'/home?query=' + escape_url(query)}'>#{query}</a>"
  end

  def create_form(path, query, shead)
    shead = shead || 'directory'
    
    # こっちにすると'検索'ボタンを押した時に新しくウィンドウが開く
    # <form action='' target='_blank' method='post'>
    <<EOF
  <form action='' method='post'>
    <p>
      <input name='query' size='60' type='text' value='#{query}' />
      <input type='submit' value='検索'><br></input>
      #{create_radio('all', shead)}
      <label>全体を検索</label>
      #{create_radio('package', shead)}
      <label> #{package_name(path)} 以下</label>
      #{create_radio('directory', shead)}
      <label> #{current_name(path)} 以下</label>
    </p>
  </form>
EOF
  end

  def create_radio(value, shead)
    str = (value == shead) ? 'checked' : ''
    "<input name='shead' type='radio' value='#{value}' #{str}/>"
  end

  def create_headmenu(path, query)
    # href = "#{request.path_info}?'#{request.query_string}"
    # href = '/home/rack-1.3.0/lib/rack/handler/cgi.rb?shead=directory'
    href = Mkurl.new('/home/' + path, params).inherit_query_shead
    <<EOF
    <a href="/home" class="headmenu">全てのパッケージ</a>
    <a href="#{href}" class="headmenu" onclick="window.open('#{href}'); return false;">新しい検索</a>
EOF
  end

  def topic_path(path, params)
    href = '/home'
    path.split('/').map {|v|
      href += '/' + v
      "<a href='#{Mkurl.new(href, params).inherit_shead}'>#{v}</a>"
    }.join('/')
  end

  def package_name(path)
    (path == "") ? 'root' : path.split('/')[0]
  end

  def current_name(path)
    (path == "") ? 'root' : File.basename(path)
  end

  def path_title(path)
    (path == "") ? "root" : path
  end

  def filelist_title(path)
    (path == "") ? "Package List" : path
  end
end