#!/usr/bin/env ruby

require 'bloggerpost'
require 'optparse'

req_method     = 'new'
url            = nil
style_name     = nil
blog_name      = nil
tag_list       = nil
category_list  = nil
trackback_list = nil
preview        = false

ARGV.options do |opt|
  opt.on('-u VAL', '--update=VAL') do |v|
    url = v
    req_method = 'edit'
  end
  opt.on('-d VAL', '--delete=VAL')  do |v|
    url = v
    req_method = 'delete'
  end
  opt.on('-t VAL', '--tag=VAL') do |v|
    opt_tag_list = v.split(',')
    if tag_list
      tag_list.concat(opt_tag_list)
    else
      tag_list = opt_tag_list
    end
  end
  opt.on('-c VAL', '--category=VAL') do |v|
    opt_category_list = v.split(',')
    if category_list
      category_list.concat(opt_category_list)
    else
      category_list = opt_category_list
    end
  end
  opt.on('-T VAL', '--trackback=VAL') do |v|
    opt_trackback_list = v.split(',')
    if trackback_list
      trackback_list.concat(opt_trackback_list)
    else
      trackback_list = opt_trackback_list
    end
  end
  opt.on('-s VAL', '--style=VAL')       {|v| style_name = v }
  opt.on('-b VAL', '--blog-name=VAL')   {|v| blog_name = v }
  opt.on('--preview') { preview = true }
  opt.parse!
end

filename = ARGV[0]

config = BloggerPost::Config.new

entry = nil
case req_method
when 'new'
  if filename
    entry = BloggerPost::Entry.new_file(config, style_name, blog_name, tag_list, category_list, trackback_list, filename)
  else
    entry = BloggerPost::Entry.new_body(config, $stdin.read, style_name, blog_name, tag_list, category_list, trackback_list)
  end
when 'edit'
  if filename
    entry = BloggerPost::Entry.edit_file(config, url, tag_list, category_list, filename)
  else
    entry = BloggerPost::Entry.edit_body(config, url, $stdin.read, tag_list, category_list)
  end
  entry.clear_cache
when 'delete'
  entry = BloggerPost::Entry.new_db(config, url)
end

if preview
  puts(entry.to_html)
else
  request = BloggerPost::Request.new(config)
  case req_method
  when 'new'
    result = request.new_post(entry)
  when 'edit'
    result = request.edit_post(entry)
  when 'delete'
    result = request.delete_post(entry)
  end
  puts('done')
  puts(entry.url) if entry.url
end
