# main.py
# Ponto de entrada da aplicação
from pathlib import Path
from modules import scanner, copier
from modules.logger import logger
from modules.gui import UniqGUI
import tkinter as tk


def main_gui():
    # interface gráfica
    root = tk.Tk()
    app = UniqGUI(root)
    root.mainloop()


def main():
    # Mostrar menu e interagir com o utilizador
    # Receber caminho da origem e destino
    caminho_pasta_origem = input(
        "Introduza caminho da pasta de origem: ").strip()
    if not Path(caminho_pasta_origem).is_dir():
        logger.error("Caminho '%s' não é um directório válido.",
                     caminho_pasta_origem)
        raise NotADirectoryError(
            f"Erro: {caminho_pasta_origem} não é um directório válido"
        )
    caminho_pasta_destino = input(
        "Introduza caminho da pasta de destino: ").strip()
    if not Path(caminho_pasta_destino).is_dir():
        logger.info(
            "Não foi encontrado directório de destino '%s'. criado directório.",
            caminho_pasta_destino,
        )
        print("Não foi encontrado directório de destino. a criar...")
        Path(caminho_pasta_destino).mkdir(parents=True, exist_ok=True)
    # Escolher método de organização
    categorizar_data: bool = (
        input("Categorizar por data? (s/N): ").strip().lower() == "s"
    )
    usar_data_criacao: bool = False
    # se for escolhido para categorizar por data, escolher que data usar
    if categorizar_data:
        usar_data_criacao = (
            input("Usar data de criação (defeito, usar data modificação)? (s/N): ")
            .strip()
            .lower()
            == "s"
        )
    # definir formato de data
    formato_data: str = input(
        "Defina um formato de data (defeito: %d-%m-%Y): ").strip()
    if not formato_data:
        formato_data = "%d-%m-%Y"
    # excluir duplicados?
    excluir_duplicados: bool = (
        input("Excluir duplicados (defeito, excluir)? (s/N): ").strip().lower() == "s"
    )
    # Iniciar processo de backup
    # criar lista de ficheiros que estão na origem
    # excluir os duplicados
    if excluir_duplicados:
        dicionario_ficheiros = scanner.listar_ficheiros_unicos(
            caminho_pasta_origem)
        lista_ficheiros = [ficheiros[0]
                           for ficheiros in dicionario_ficheiros.values()]
    # ou manter todos os ficheiros
    else:
        lista_ficheiros = scanner.listar_ficheiros(caminho_pasta_origem)

    if not lista_ficheiros:
        print(f"Não foi encontrado nenhum ficheiro em {caminho_pasta_origem}")
        return
    else:
        print(f"Encontrados {len(lista_ficheiros)} em {caminho_pasta_origem}")
    # copiar ficheiros que estão na lista_ficheiros para a pasta destino,
    # segundo os parametros passados
    copier.copiar_ficheiros_para_destino(
        lista_ficheiros,
        caminho_pasta_destino,
        categorizar_data,
        usar_data_criacao,
        formato_data,
    )
    print(f"Concluida a cópia de {len(lista_ficheiros)} para {
          caminho_pasta_destino}.")


if __name__ == "__main__":
    # main()
    main_gui()
