"""Carrega e valida as configuracoes a partir do arquivo .env."""
from __future__ import annotations

import os
from dataclasses import dataclass
from pathlib import Path

from dotenv import load_dotenv

BASE_DIR = Path(__file__).resolve().parent

load_dotenv(BASE_DIR / ".env")


def _bool(valor: str | None, padrao: bool = False) -> bool:
    if valor is None:
        return padrao
    return valor.strip().lower() in {"1", "true", "sim", "yes", "y", "on"}


@dataclass
class Config:
    saida: str = "saida/Tabela-Funil.xlsx"
    mapeamento: str = "config/mapeamento_campos.json"

    # ---- Webhook (recebe dados enviados pela Rubeus via POST/JSON) ----
    webhook_host: str = "0.0.0.0"
    webhook_port: int = 8000
    webhook_path: str = "/webhook/rubeus"
    webhook_token: str = ""
    webhook_dir: str = "dados_webhook"
    webhook_autogerar: bool = True

    @classmethod
    def carregar(cls) -> "Config":
        return cls(
            saida=os.getenv("RUBEUS_SAIDA", "saida/Tabela-Funil.xlsx").strip(),
            mapeamento=os.getenv("RUBEUS_MAPEAMENTO", "config/mapeamento_campos.json").strip(),
            webhook_host=os.getenv("RUBEUS_WEBHOOK_HOST", "0.0.0.0").strip(),
            webhook_port=int(os.getenv("RUBEUS_WEBHOOK_PORT", "8000") or "8000"),
            webhook_path="/" + os.getenv("RUBEUS_WEBHOOK_PATH", "/webhook/rubeus").strip().lstrip("/"),
            webhook_token=os.getenv("RUBEUS_WEBHOOK_TOKEN", "").strip(),
            webhook_dir=os.getenv("RUBEUS_WEBHOOK_DIR", "dados_webhook").strip(),
            webhook_autogerar=_bool(os.getenv("RUBEUS_WEBHOOK_AUTOGERAR"), True),
        )

    def caminho(self, valor: str) -> Path:
        """Resolve um caminho relativo a partir da pasta do projeto."""
        p = Path(valor)
        return p if p.is_absolute() else (BASE_DIR / p)
