require 'capybara'
require 'capybara/dsl'
require 'selenium-webdriver'
require 'pry'

class ChromeBrowser
  include Capybara::DSL

  attr_reader :session, :name

  def initialize(name, session)
    @name = name
    @session = session
  end

  def last_build_id
    @session.first('.build-row-cell').text.scan(/\d{4}/).first.to_i
  end

  def build_report_results
    res = {}
    all_features = @session.all('tbody tr').drop(1)
    all_features.each do |f|
      f_text = f.find(:xpath, 'td[1]').text
      f_name = f_text.gsub(/ \d{10}/, '')
      passed = f.find(:xpath, 'td[3]').text.to_i
      failed = f.find(:xpath, 'td[4]').text.to_i
      res[f_name] ||= { passed: 0, failed: 0 }
      res[f_name][:passed] += passed
      res[f_name][:failed] += failed
    end
    res
  end

  def cookies
    @session.driver.browser.manage.all_cookies
  end

  def add_cookies(arr)
    arr.each do |c|
      @session.driver.browser.manage.add_cookie(c)
    end
  end

  def log_in(params)
    puts "#{name}: logging in".blue
    username = ENV['JENKINS_USER'] || abort('JENKINS_USER env var was not found')
    password = ENV['JENKINS_PASSWORD'] || abort('JENKINS_PASSWORD env var was not found')
    @session.visit params[:jenkins_host]
    sleep params[:default_sleep]
    @session.find('[name="j_username"]').set(username)
    @session.find('[name="j_password"]').set(password)
    @session.find('#yui-gen1-button').click
  end

  def parse_builds(urls)
    puts "#{name}: parsing #{urls.count} builds".blue
    result = []
    urls.each do |url|
      begin
        session.visit(url)
        result << { build_id: url, features: build_report_results }
        $progress_bar.increment!
      rescue => _e
        puts "#{name}: an error occurred while parsing #{url}".red
      end
    end
    result
  end
end
