from pathlib import Path

from django.conf import settings
from django.core.management.base import BaseCommand

from core.demo_credentials import DEMO_PORTAL_ACCOUNTS


class Command(BaseCommand):
    help = "Exporta as credenciais fictícias dos clientes para um ficheiro TXT."

    def add_arguments(self, parser):
        parser.add_argument(
            "--output",
            default="DEMO_CLIENT_CREDENTIALS.txt",
            help="Caminho do ficheiro de saída, relativo à raiz do projeto ou absoluto.",
        )

    def handle(self, *args, **options):
        output = Path(options["output"])
        if not output.is_absolute():
            output = Path(settings.BASE_DIR) / output
        output.parent.mkdir(parents=True, exist_ok=True)

        lines = [
            "KREATE4WEB — CREDENCIAIS FICTÍCIAS DO PORTAL DE CLIENTES",
            "=" * 68,
            "",
            "ATENÇÃO: estas contas destinam-se apenas ao ambiente local de demonstração.",
            "Nunca reutilizar estas palavras-passe nem publicar este ficheiro em produção.",
            "",
            "Login único: http://127.0.0.1:8000/",
            "",
        ]
        for index, account in enumerate(DEMO_PORTAL_ACCOUNTS, start=1):
            lines.extend(
                [
                    f"{index:02d}. {account['client_name']}",
                    f"    Perfil: {account['role_label']}",
                    f"    Utilizador: {account['username']}",
                    f"    Palavra-passe: {account['password']}",
                    f"    Email fictício: {account['email']}",
                    "    Permissões: "
                    + ", ".join(
                        label
                        for allowed, label in [
                            (account["can_view_financial"], "financeiro"),
                            (account["can_view_documents"], "documentos"),
                            (account["can_manage_tickets"], "tickets"),
                        ]
                        if allowed
                    )
                    or "consulta limitada",
                    "",
                ]
            )
        lines.extend(
            [
                "CENÁRIOS DE TESTE SUGERIDOS",
                "- cliente.acacia: perfil completo com serviços, documentos, pagamentos e tickets.",
                "- financeiro.horizonte: valida restrição a tickets e acesso financeiro.",
                "- tecnico.clinica: valida ausência de dados financeiros e acesso técnico/tickets.",
                "- cliente.confirmar: valida perfil de consulta limitada e dados incompletos.",
                "",
            ]
        )
        output.write_text("\n".join(lines), encoding="utf-8")
        self.stdout.write(self.style.SUCCESS(f"Credenciais DEMO exportadas para {output}"))
