#!/usr/bin/ruby1.9.1
# -*- coding: utf-8 -*-

# ---------------------------------------
# --- require
# ---------------------------------------
require "cgi"
require 'rubygems'
require 'dbi'
require 'json'

# -----------------------------------------------
# --- login
# -----------------------------------------------
DBNAME = 'DBI:Mysql:kabedon:suika.yuumu.org'
DBLOGIN = 'rero2'
DBPASS = 'qazujn'
VERB = true

PAGECOUNT = 10
HTMLTEMPLATE = "./title_list.html"
HOMEURL = 'http://www.fumi2kick.com/kabedon/'
PAGEURL = 'http://www.fumi2kick.com/kabedon/title_search.cgi'

# ---------------------------------------
# --- class
# ---------------------------------------
class PetitTemplate
  def initialize(template_path)
    @loaded = false
    @parts = []
    @template = ''
    @loaded = load(template_path)
  end

  def isload?
    return @loaded
  end

  def add(tag, body)
    item = [tag, body]
    @parts << item
  end

  def load(file)
    result = false
    begin
      open(file, "r") do |fp|
        @template = ''
        fp.each do |line|
          @template << line.encode('UTF-8', 'UTF-8')
        end
      end
      result = true
    rescue(e)
      puts e
    end
    return result
  end

  def generate
    body = String.new(@template)
    @parts.each do |item|
      body.gsub!(/%%#{item[0]}%%/, item[1].encode('UTF-8', 'UTF-8'))
    end
    return body
  end

end


# -----------------------------------------------
# --- cgi work
# -----------------------------------------------

cgi = CGI.new
params = cgi.params
result = []

if (params['q'].empty?) then
  anime_title = ''
else
  anime_title = cgi['q']
end
if (params['p'].empty?) then
  page = 0
else
  page = cgi['p'].to_i - 1
end


# --- open DB
db = DBI.connect(DBNAME, DBLOGIN, DBPASS)
db.do('SET NAMES utf8')

# --- db work
# - title num
title_num_max = 0
if anime_title.empty? then
   sql = "SELECT count(*) FROM anime_title"
   sth = db.execute(sql)
else
   sql = "SELECT count(*) FROM anime_title WHERE title like ?"
   sth = db.execute(sql, '%'+anime_title+'%')
end
sth.each do |row|
  title_num_max = row[0].to_i
end
sth.finish

# - title
start = page * PAGECOUNT
if anime_title.empty? then
   sql = "SELECT anime_title.id, anime_title.title,title_preview.dong FROM anime_title INNER JOIN title_preview ON anime_title.id = title_preview.id ORDER BY title_preview.recent DESC LIMIT ?,?"
   sth = db.execute(sql, start, start+PAGECOUNT)
else
   sql = "SELECT anime_title.id, anime_title.title,title_preview.dong FROM anime_title INNER JOIN title_preview ON anime_title.id = title_preview.id WHERE anime_title.title like ? ORDER BY title_preview.recent DESC LIMIT ?,?"
   sth = db.execute(sql, '%'+anime_title+'%', start, start+PAGECOUNT)
end
sth.each do |row|
  item = []
  item << row[0].to_i
  item << row[1].encode('UTF-8', 'UTF-8')
  item << row[2].to_i
  result << item
end
sth.finish


# --- format
template = PetitTemplate.new(HTMLTEMPLATE)
exit if template.isload? == false
html = ''
id = 1+start
result.each do |item|
  link = sprintf("%s%d/", HOMEURL, item[0])
  html << sprintf("%5d: <a href=\"%s\">「%s」</a>  %d どん <br/>\n", id, link, item[1], item[2])
  id += 1
end
template.add("list", html)

# pager
html = ""
allpage = title_num_max / PAGECOUNT
if page > 0 then
    link = sprintf("%s?p=%d", PAGEURL, page)
    html << sprintf("<a href=\"%s\">prev</a> ", link)
end
for i in 0..allpage
  if i == page then
    html << sprintf("%d ", i+1)
  else
    link = sprintf("%s?p=%d", PAGEURL, i+1)
    html << sprintf("<a href=\"%s\">%d</a> ", link, i+1)
  end
end
if page < allpage then
    link = sprintf("%s?p=%d", PAGEURL, page+2)
    html << sprintf("<a href=\"%s\">next</a> ", link)
end
html << "\n"
template.add("pager", html)

print cgi.header("type" => "text/html",
           "charset" => "utf-8",
           "language" => "jp",
           "Last-Modified" => CGI.rfc1123_date(Time.now),
           "expires" => Time.local(1970,1,1),
           "progma" => "no-cache",
           "Cache-Control" => "no-cache"
           )

print template.generate

