from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from pathlib import Path
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
import time
import datetime
import pytz
import calendar
import pandas as pd
import numpy as np
import glob
import re
import os
import socket
import shutil
import win32com.client as win32
from os import listdir
from os.path import isfile, join, basename

# Defina um tempo de espera inicial
time.sleep(10)

hoje = datetime.date.today()
hoje_formatado = hoje.strftime("%d/%m/%Y")
ontem = hoje - datetime.timedelta(1)
ultimo_dia_mes = calendar.monthrange(hoje.year, hoje.month)[1]

data_inicial = ontem
data_final = hoje

datainformat = data_inicial.strftime("%d%m%Y")
datafiformat = data_final.strftime("%d%m%Y")

user_home_dir = os.path.expanduser("~")
downloads_dir = os.path.join("C:\\intranetdfl\\storage\\app\\csv_files")
documentos_dir = os.path.join(user_home_dir, "Downloads")


def rodar_funcao():
    # excluir do downloads
    dir_downloads = documentos_dir
    filelist = glob.glob(os.path.join(dir_downloads, "undefined_*.csv"))
    for f in filelist:
        os.remove(f)
        print("Arquivos excluídos do Downloads")
        print("-------------------------------")

    # abrindo o navegador
    servico = Service(ChromeDriverManager().install())
    opcoes = webdriver.ChromeOptions()
    opcoes.add_argument('--headless=new')
    driver = webdriver.Chrome(service=servico, options=opcoes)
    new_url2 = "https://dfltransportes.brudam.com.br/"
    url106 = "https://dfltransportes.brudam.com.br/sac/lista_processos.php"

    # Excluir do servidor
    dir_servidor = 'C:\\intranetdfl\\storage\\app\\csv_files'
    arquivo_servidor = os.path.join(dir_servidor, "transport_data.csv")
    if os.path.exists(arquivo_servidor):
        os.remove(arquivo_servidor)
        print("Arquivo excluído do servidor")
        print("-------------------------------")

    driver.execute_script("window.open('');")
    driver.switch_to.window(driver.window_handles[1])

    driver.get(new_url2)
    driver.find_element('xpath', '//*[@id="user"]').send_keys('BRD.TESTE')
    driver.find_element('xpath', '//*[@id="password"]').send_keys('Jem1122@')
    driver.find_element('xpath', '//*[@id="acessar"]').click()
    time.sleep(10)

    driver.find_element('xpath', '//*[@id="table_search_7B6r5dvvrdvA65DVDsjadn"]/tbody/tr[3]/td/table/tbody/tr/td[1]/table/tbody/tr[3]/td[1]').click()
    time.sleep(5)
    driver.get(url106)

    # datainicial
    driver.find_element('xpath', '/html/body/center/table/tbody/tr[3]/td/table/tbody/tr[2]/td[1]/table/tbody/tr/td/table/tbody/tr[2]/td/form/table/tbody/tr[4]/td[1]/input').click()
    time.sleep(5)
    driver.find_element('xpath', '/html/body/center/table/tbody/tr[3]/td/table/tbody/tr[2]/td[1]/table/tbody/tr/td/table/tbody/tr[2]/td/form/table/tbody/tr[4]/td[1]/input').send_keys(datainformat)

    # datafinal
    driver.find_element('xpath', '/html/body/center/table/tbody/tr[3]/td/table/tbody/tr[2]/td[1]/table/tbody/tr/td/table/tbody/tr[2]/td/form/table/tbody/tr[4]/td[2]/input').click()
    time.sleep(5)
    driver.find_element('xpath', '/html/body/center/table/tbody/tr[3]/td/table/tbody/tr[2]/td[1]/table/tbody/tr/td/table/tbody/tr[2]/td/form/table/tbody/tr[4]/td[2]/input').send_keys(datafiformat)
    time.sleep(5)

    # realizar busca
    driver.find_element('xpath', '/html/body/center/table/tbody/tr[3]/td/table/tbody/tr[2]/td[1]/table/tbody/tr/td/table/tbody/tr[2]/td/form/table/tbody/tr[4]/td[11]/input').click()
    time.sleep(15)

    # selecionar excel
    try:
        WebDriverWait(driver, 30).until(
            EC.element_to_be_clickable((By.XPATH, '/html/body/center/table/tbody/tr[3]/td/table/tbody/tr[2]/td[2]/table/tbody/tr/td[2]/button'))
        ).click()
        print("Tipo de extração: Excel")
    except Exception as e:
        print(f"Erro ao clicar no botão: {e}")

    time.sleep(25)
    ActionChains(driver)\
        .key_down(Keys.TAB)\
        .perform()
    print("Formato selecionado: csv")

    time.sleep(5)
    ActionChains(driver)\
        .key_down(Keys.ENTER)\
        .perform()
    print("Realizando download")

    time.sleep(25)
    print("Finalizando ação")

    print("-------------------------------")
    driver.quit()
    print("Operação finalizada")

    # Renomear e mover o arquivo
    source_dir = documentos_dir
    dst = downloads_dir

    # Encontra o arquivo que começa com "undefined_"
    files = glob.glob(os.path.join(source_dir, "undefined_*.csv"))

    for file in files:
        if os.path.isfile(file):
            # Move o arquivo para o servidor
            shutil.copy(file, os.path.join(dst, "transport_data.csv"))
            print("Arquivo movido para o servidor como transport_data.csv")

            # Renomeia o arquivo
            #os.remove(os.path.join(source_dir, "577download.csv"))
            #os.rename(os.path.join(dst, "577download.csv"), os.path.join(dst, "577download.csv"))
            #print("Arquivo renomeado para 577download.csv")

            print("-------------------------------")
            print("Arquivos movidos para o servidor")
            print("-------------------------------")

    print('Ações realizadas com sucesso!', hoje_formatado)

print('RPA Ativado')
rodar_funcao()
