import os
from pathlib import Path
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()


class Settings:
    """Application settings loaded from environment variables."""

    GEMINI_API_KEY: str = os.getenv("GEMINI_API_KEY", "")
    CORS_ORIGINS: str = os.getenv("CORS_ORIGINS", "http://localhost:3000")
    HOST: str = os.getenv("HOST", "0.0.0.0")
    PORT: int = int(os.getenv("PORT", "8000"))

    # Reference docs path - defaults to ../reference_docs relative to backend/
    _default_ref_docs = Path(__file__).parent.parent.parent / "reference_docs"
    REFERENCE_DOCS_PATH: str = os.getenv("REFERENCE_DOCS_PATH", str(_default_ref_docs))

    # Azure AD Configuration for token verification
    AZURE_TENANT_ID: str = os.getenv("AZURE_TENANT_ID", "")
    AZURE_CLIENT_ID: str = os.getenv("AZURE_CLIENT_ID", "")

    # Auth bypass for development (set to "true" to skip auth)
    DISABLE_AUTH: bool = os.getenv("DISABLE_AUTH", "false").lower() == "true"

    # Database configuration
    DATABASE_URL: str = os.getenv(
        "DATABASE_URL",
        "postgresql+asyncpg://modcomms:modcomms_dev@localhost:5432/modcomms"
    )

    # File storage path for uploaded proofs
    _default_storage = Path(__file__).parent.parent.parent / "storage"
    FILE_STORAGE_PATH: str = os.getenv("FILE_STORAGE_PATH", str(_default_storage))

    def validate(self) -> None:
        """Validate required settings are present."""
        if not self.GEMINI_API_KEY:
            raise ValueError("GEMINI_API_KEY environment variable is required")

        if not self.DISABLE_AUTH:
            if not self.AZURE_TENANT_ID:
                raise ValueError("AZURE_TENANT_ID environment variable is required (or set DISABLE_AUTH=true)")
            if not self.AZURE_CLIENT_ID:
                raise ValueError("AZURE_CLIENT_ID environment variable is required (or set DISABLE_AUTH=true)")


settings = Settings()
