import sys

from common import print_message
from src.interface.python_project import sync_folder
from src.interface.python_project_dpsi import SQL_DATA_DIR, PythonProjectDPSIInterface
from src.interface.python_project_dpsi_sync import ApiSync
from src.interface.python_project_dpsi_validator import MetadataValidator


class PythonAppDpsi(PythonProjectDPSIInterface):
    """
    Classe para gerenciar o projeto Python do DPSI (Data Platform Service Integration).
    """

    def compile(self) -> None:
        print_message(
            "Projetos do tipo DPSI não possuem etapa de compile habilitada no CI, "
            "pois devem conter somente scripts SQL com as configurações dos Master Datas."
        )

    def validate(self) -> None:
        """
        Valida o projeto python executando o validate padrão do devops
        e em seguida executa a validação dos metadados dos Master Datas
        utilizando a classe MetadataValidator.
        """
        super().validate()

        print_message(
            "Validando metadados dos Master Datas com o script de validação..."
        )
        result = MetadataValidator().main()
        if not result.passed:
            sys.exit(1)

    def package(self) -> None:
        """
        Sincroniza os arquivos SQL do diretório SQL_DATA_DIR para o bucket S3
        e inicia o processo de upsert dos metadados utilizando a classe ApiSync.
        """
        summary = ApiSync().main()
        if summary["errors"] > 0:
            sys.exit(1)
        sync_folder(SQL_DATA_DIR, self.work_bucket_name, "", self.s3_client, ".sql")

    def unit_test(self) -> None:
        """
        Ignora testes unitários para o projeto DPSI.
        """
        print_message(
            "Projetos do tipo DPSI não possuem Unit Tests habilitados no CI, "
            "pois devem conter somente scripts SQL com as configurações dos Master Datas."
        )
