from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.service import service

import pandas as pd
import time



def download_files(company_name, time_interval, start_date, end_date, base_dir):
    options = Options()

    download_setting = {
        "download.default_directory" : f"{base_dir}{time_interval}/{company_name}",
        "download.prompt_for_download" : False,
        "download.directory_upgrade": True,
    }
    options.add_experimental_option("prefs", download_setting)

    options.add_argument('--disable-dev-shm-usage')

    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

    driver.get("https://admin.wls.eims.co.kr/WattageState/Report")

    input_id = driver.find_element(By.CLASS_NAME, 'login-userid')
    input_password = driver.find_element(By.CLASS_NAME, 'login-password')
    login_button = driver.find_element(By.CSS_SELECTOR, "div.col-sm-7.text-right button")


    input_id.clear()
    input_password.clear()

    input_id.send_keys("wl00002")
    input_password.send_keys("2666##")

    login_button.click()

    did_it_logged_in = EC.presence_of_element_located((By.ID, 'data-select2'))

    time.sleep(2)
    driver.get("https://admin.wls.eims.co.kr/WattageState/Report")
    time.sleep(2)

    # ---------- gather the data from the website, by company, time_interval, and date

    starting_date_input_box = driver.find_element(By.NAME, "from")
    end_date_input_box = driver.find_element(By.NAME, "to")

    starting_date_input_box.clear()
    end_date_input_box.clear()

    starting_date_input_box.send_keys(start_date)
    end_date_input_box.send_keys(end_date)



    drop_down_customer = driver.find_element(By.XPATH, '//select[@data-placeholder="참여고객명"]')
    # customer_list = drop_down_customer.text.split("\n")[1:]


    drop_down_time_interval = driver.find_element(By.XPATH, '//select[@data-placeholder="검침기종류"]')
    # time_interval_list = drop_down_time_interval.text.split("\n")[1:3]


    select = Select(drop_down_customer)

    select.select_by_visible_text(company_name)


    select = Select(drop_down_time_interval)

    select.select_by_visible_text(time_interval)

    the_red_button = driver.find_element(By.XPATH, '//button[@ng-click="ctrl.getContractWattageStatistics(ctrl.req)"]')
    the_red_button.click()
    the_download_button = driver.find_element(By.XPATH, '//a[@class="btn btn-default btn-outline pull-right btn-sm"]')

    wait = WebDriverWait(driver, 10)
    href = wait.until(
        lambda driver: the_download_button.get_attribute('href')
    )
    the_download_button.click()

    time.sleep(10)


if __name__ == "__main__":
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument("-t", "--time_interval", type=int)
    args = parser.parse_args()

    time_interval_index = args.time_interval

    df_c = pd.read_csv("customer_list.csv")
    df_t = pd.read_csv("time_interval_list.csv")
    t = df_t.iloc[time_interval_index].values
    t = t[0].replace(' ', '')
    df_dates = pd.read_csv("date_string.csv")
    base_dir = "/media/juni/T7 Shield/웰라인데이터/"
    # for t in df_t.values:
    for c in df_c.values:
        for dates in df_dates.values:
            download_files(c[0], t, dates[0], dates[1], base_dir)

