import argparse
from pathlib import Path

from lib.preparar_configuracao_linux import (
    CAMPOS_CRIPTOGRAFADOS_PADRAO,
    preparar_configuracao,
)


def main():
    diretorio_scripts_implantacao = Path(__file__).resolve().parents[1]

    parser = argparse.ArgumentParser(
        description="Prepara ou atualiza o microuniversoWeb.yaml para execucao Linux/WSL local."
    )
    parser.add_argument(
        "--modelo",
        default=diretorio_scripts_implantacao / "microuniversoWeb-modelo.yaml",
        type=Path,
        help="Arquivo modelo atualizado.",
    )
    parser.add_argument(
        "--destino",
        default=Path("/microuniversoWeb/microuniversoWeb.yaml"),
        type=Path,
        help="Arquivo de configuracao que sera criado/atualizado.",
    )
    parser.add_argument(
        "--env",
        default=diretorio_scripts_implantacao / "config.env",
        type=Path,
        help="Arquivo config.env com valores em texto puro. Se nao existir, sera ignorado.",
    )
    parser.add_argument(
        "--sem-backup",
        action="store_true",
        help="Nao gerar backup antes de sobrescrever um arquivo existente.",
    )
    parser.add_argument(
        "--dry-run",
        action="store_true",
        help="Calcula as alteracoes, mas nao grava o arquivo de destino.",
    )
    parser.add_argument(
        "--criptografar-campo",
        action="append",
        default=[],
        help="Campo extra para criptografar, em caminho pontuado. Pode ser informado mais de uma vez.",
    )

    args = parser.parse_args()
    caminho_env = args.env if args.env.exists() else None
    campos_criptografados = tuple(CAMPOS_CRIPTOGRAFADOS_PADRAO) + tuple(args.criptografar_campo)

    resultado = preparar_configuracao(
        caminho_modelo=args.modelo,
        caminho_destino=args.destino,
        caminho_env=caminho_env,
        campos_criptografados=campos_criptografados,
        gerar_backup=not args.sem_backup,
        dry_run=args.dry_run,
    )

    print(f"Destino: {resultado.destino}")
    print(f"Arquivo criado: {'sim' if resultado.criado else 'nao'}")
    print(f"Versao anterior: {resultado.versao_anterior or 'nenhuma'}")
    print(f"Versao do modelo: {resultado.versao_modelo or 'indefinida'}")
    print(f"config.env usado: {caminho_env if caminho_env else 'nao encontrado'}")
    print(f"Variaveis aplicadas: {len(resultado.variaveis_aplicadas)}")
    print(f"Campos criptografados: {len(resultado.campos_criptografados)}")

    if resultado.variaveis_aplicadas:
        print("Chaves aplicadas:")
        for chave in resultado.variaveis_aplicadas:
            print(f"  - {chave}")

    if resultado.campos_criptografados:
        print("Campos gravados criptografados:")
        for campo in resultado.campos_criptografados:
            print(f"  - {campo}")

    if resultado.backup:
        print(f"Backup: {resultado.backup}")

    if args.dry_run:
        print("Dry-run: nenhuma alteracao foi gravada.")


if __name__ == "__main__":
    main()
