# frozen_string_literal: true
require 'thor'
require 'cxeed'

module Cxeed
  class Command < Thor
    desc 'init', 'initialize credential'
    def init
      cred = Cxeed::Credential.new

      login_url = ask "input login url #{ cred.login_url&.empty? ? '' : "(#{cred.login_url})" }:"
      cred.login_url = login_url unless login_url.empty?

      company_code = ask "input company code #{ cred.company_code&.empty? ? '' : "(#{cred.company_code})" }:"
      cred.company_code = company_code unless company_code.empty?

      employee_code = ask "input employee code #{ cred.employee_code&.empty? ? '' : "(#{cred.employee_code})" }:"
      cred.employee_code = employee_code unless employee_code.empty?

      password = ask '(required!)input password:', echo: false
      cred.password = password

      cred.store
    end

    desc 'cred', 'show credential'
    def cred
      cred = Cxeed::Credential.new

      say "login url    : #{ cred.login_url }"
      say "company code : #{ cred.company_code }"
      say "employee code: #{ cred.employee_code }"
      say "password     : #{ cred.password }"
    end

    desc 'login_test', 'login_test'
    method_option :verbose, :aliases => '-v', :desc => 'Make the operation more talkative'
    method_option :save_screenshot, :aliases => '-s', :desc => 'Save debug screenshot'
    def login_test
      cred = Cxeed::Credential.new
      proxy = Cxeed::Proxy.new cred, verbose: options.key?(:verbose), save_screenshot: options.key?(:save_screenshot)

      if proxy.login_test != cred.login_url
        say 'login success'
      else
        say 'login fail'
      end
    end

    desc 'arrive [time] [date]', 'submit arrival time (time format is "%H:%M") (date format 2017/09/27)'
    method_option :verbose, :aliases => '-v', :desc => 'Make the operation more talkative'
    method_option :save_screenshot, :aliases => '-s', :desc => 'Save debug screenshot'
    def arrive(time = Time.now.strftime('%H:%M'), date = Time.now.strftime('%Y/%m/%d'))

      cred = Cxeed::Credential.new
      proxy = Cxeed::Proxy.new cred, verbose: options.key?(:verbose), save_screenshot: options.key?(:save_screenshot)

      proxy.arrive time, DateTime.parse(date)

      puts "arrive #{ date } #{ time}"
    end

    desc 'leave [time] [date]', 'submit leave time (time format is "%H:%M") (date format 2017/09/27)'
    method_option :verbose, :aliases => '-v', :desc => 'Make the operation more talkative'
    method_option :save_screenshot, :aliases => '-s', :desc => 'Save debug screenshot'
    def leave(time = Time.now.strftime('%H:%M'), date = Time.now.strftime('%Y/%m/%d'))
      verbose = options.key? :verbose

      cred = Cxeed::Credential.new
      proxy = Cxeed::Proxy.new cred, verbose: options.key?(:verbose), save_screenshot: options.key?(:save_screenshot)

      proxy.leave time, DateTime.parse(date)

      puts "leave #{ date } #{ time }"
    end

    desc 'today', 'show today attendance'
    method_option :verbose, :aliases => '-v', :desc => 'Make the operation more talkative'
    method_option :save_screenshot, :aliases => '-s', :desc => 'Save debug screenshot'
    def today
      cred = Cxeed::Credential.new
      proxy = Cxeed::Proxy.new cred, verbose: options.key?(:verbose), save_screenshot: options.key?(:save_screenshot)

      today = proxy.today

      puts "today(#{ today.date.strftime('%m/%d') }) #{ today.attendance_time }"
    end

    desc 'attendance date(format: %Y/%m/%d)', 'show day attendance'
    method_option :verbose, :aliases => '-v', :desc => 'Make the operation more talkative'
    def attendance(date)
      cred = Cxeed::Credential.new
      proxy = Cxeed::Proxy.new cred, verbose: options.key?(:verbose), save_screenshot: options.key?(:save_screenshot)

      attendance = proxy.day_attendance date

      puts "#{ attendance.date.strftime('%Y/%m/%d') } #{ attendance.attendance_time }"
    end
  end
end