import os
import pandas as pd
import numpy as np
from time import sleep
from datetime import datetime
import csv


def listar_pastas(diretorio):
    pastas = [nome for nome in os.listdir(diretorio) if os.path.isdir(os.path.join(diretorio, nome))]
    return pastas


def processar_veranicos_estacao_chuvosa():
    print("processar veranicos ...")
    diretorio = 'data'  # nome da pasta principal
    pastas = listar_pastas(diretorio)
    
    for pasta in pastas:
        print(f"Encontrada pasta: {pasta}")
        estacao_com_inicio_fim_chuva=f"./30estacaochuvosa/{pasta}_estacao_chuvosa.csv"
        dados_veranivos=f"./01processados/{pasta}_dados.csv"
        output_csv = f"./41veranicoschuvosa/{pasta}_veranicos.csv"
        print(estacao_com_inicio_fim_chuva)
        print(dados_veranivos)
        print(output_csv)

        veranicos_com_estacao_chuvosa(estacao_com_inicio_fim_chuva,dados_veranivos, output_csv)

           



def veranicos_com_estacao_chuvosa(estacao_com_inicio_fim_chuva,dados_veranivos, output_csv):

    with open(output_csv, 'w') as file:
        cabecalho = ['CODIGO', 'INICIO','FINAL', 'QTDDIAS']
        writer = csv.DictWriter(file, fieldnames=cabecalho, delimiter=';')
        writer.writeheader() # Escreve o cabeçalho


  
    df_dados_estacao_chuvosa =  pd.read_csv(estacao_com_inicio_fim_chuva,  sep=';', decimal=',')
    try:
        df_dados_estacao_chuvosa['INICIO'] = pd.to_datetime(df_dados_estacao_chuvosa['INICIO'], format='%Y-%m-%d', errors='raise')
        df_dados_estacao_chuvosa['FINAL'] = pd.to_datetime(df_dados_estacao_chuvosa['FINAL'], format='%Y-%m-%d', errors='raise')
    except Exception as e:
        raise ValueError(f"Erro ao converter a coluna 'DATA': {e}")       


    df_dados_veranivos =pd.read_csv(dados_veranivos,  sep=';', decimal=',')
    try:
        df_dados_veranivos['DATA'] = pd.to_datetime(df_dados_veranivos['DATA'], format='%Y-%m-%d', errors='raise')
    except Exception as e:
        raise ValueError(f"Erro ao converter a coluna 'DATA': {e}")
    


    total = len(df_dados_estacao_chuvosa)
    for index, row in df_dados_estacao_chuvosa.iterrows():  
        print(f"\rProcessando linha {index+1}/{total}", end='')  
        estacao= row['CODIGO'] 
        start_date= row['INICIO']
        end_date= row['FINAL']
        #print(estacao , "INICIO: ", start_date, "FINAL: ", end_date)
        df_dados = df_dados_veranivos[(df_dados_veranivos['CODIGO'] == estacao) &(df_dados_veranivos['DATA'] >= start_date) &   (df_dados_veranivos['DATA'] <= end_date)]



        marcador_inicio= False
        marcador_final= False
        marcador_primeirodia= False
        leitura_chuva=0
        cont_veranico=0
        data_anterior=''
        data_incio=''
        for index, row in df_dados.iterrows():
            leitura_chuva= row['VALOR'] 
            data= row['DATA']
            
            if (marcador_inicio): #FALSO
                if leitura_chuva <=0:
                    cont_veranico= cont_veranico+1
                else:
                    marcador_final= True
        
            if (cont_veranico==1 and marcador_inicio):
                data_incio= data           
            if marcador_final:
                if (cont_veranico>=4):
                    
                    #print ('estacao:', nome_estacao,'INCIO:', data_incio, '  FIM:', data_anterior , '   DIAS:',  cont_veranico) 
                    with open(output_csv, 'a') as file:
                        writer = csv.DictWriter(file, fieldnames=cabecalho, delimiter=';')                    
                        writer.writerow({'CODIGO':estacao, 'INICIO':data_incio.strftime('%Y-%m-%d'),'FINAL':data_anterior.strftime('%Y-%m-%d'), 'QTDDIAS':cont_veranico})               

            #toda ver que chove mais que 0.5 mm ele reinicia o contador
            if leitura_chuva >0:       
                marcador_inicio= True
                cont_veranico= 0
                marcador_final= False

            data_anterior= data
            

