require 'optparse'
require 'watir-webdriver'
ENV.delete('HTTP_PROXY')

module Inter
	def self.parse
		opts = {}
		opts[:from] = 'qq'
		opts[:browser] = 'chrome'
 
		OptionParser.new do |op|
			op.banner = 'Usage: inter.rb [options]'
 
			op.on('-n Number', '--number Number', 'number of news to show') do |n|
				opts[:num] = n
			end 
 
			op.on('-b Browser', '--browser Browser', 'what browser to visit the site') do |b|
				opts[:browser] = b
			end 
 
			op.on('-s', '--sina', 'fetch news from sina') do 
				opts[:from] = 'sina'
			end 
 
		end.parse!
		opts
	end #parse

	class BaseFetcher
		def initialize url, browser
			@list = []
			@url = url
			@b = Watir::Browser.new browser
			goto_seriea_page
		end 
 
		def goto_seriea_page
			@b.goto @url
		end
 
		def get_news_list
			raise 'Can not call this method directly'
		end
 
	end
 
	class SinaFetcher < BaseFetcher
		def get_news_list
		end
	end
 
	class QqFetcher < BaseFetcher
		def get_news_list
			@b.div(:id, 'inter').div(:class, 'hot_list').links.each { |l| @list << l.text }
			@b.close
			@list
		end
 
	end
 
	class NewsFetcher
 
		def initialize(opts)
			@opts = opts
			@urls = {:sina => 'www.sina.com', :qq => 'http://sports.qq.com/seriea/'}
			@tmp_file = 'news.txt'
			save_news_list
		end 
 
		def determin_url
			@urls[@opts[:from].to_sym]
		end 

		def save_news_list
			fetch_kls_name = (@opts[:from].to_s.capitalize + 'Fetcher').to_sym
			fetcher = Inter.const_get(fetch_kls_name).new(determin_url, @opts[:browser].to_sym)
			list = fetcher.get_news_list
			File.open(@tmp_file, 'w') do |f|
				f.write list.join("\n")
			end #open
		end

		def show_news_list
			list = ''
			File.open(@tmp_file, 'r') do |f|
				list = f.read
			end 
			print list
		end
 
	end #NewsFetcher
 
end #Inter

options = Inter.parse
Inter::NewsFetcher.new(options).show_news_list