from pydantic_settings import BaseSettings
from typing import List


class Settings(BaseSettings):
    APP_NAME: str = "Bankruptcy AI"
    ADMIN_EMAIL: str
    SECRET_KEY: str
    DEBUG: bool = False

    JWT_SECRET_KEY: str
    JWT_ALGORITHM: str
    JWT_EXPIRES: int = 10080  # 7 days
    JWT_REFRESH_EXPIRES: int = 120  # 2 hours

    API_PORT: int = 8000
    DOCKER_API_PORT: int = 8000

    DB_HOST: str
    DB_URL: str

   # DB_PORT: int = 5433
   # DOCKER_DB_PORT: int = 5433
    DB_PORT: int = 5432
    DOCKER_DB_PORT: int = 5432

    DB_NAME: str

    DB_USERNAME: str
    DB_PASSWORD: str

    PG_ADMIN_EMAIL: str
    PG_ADMIN_PASSWORD: str
    PG_ADMIN_PORT: int = 5000

    ORIGINS: List[str] = ["*"]
    
    # Azure OpenAI Configuration
    AZURE_OPENAI_KEY: str
    AZURE_OPENAI_VERSION: str
    AZURE_OPENAI_DEPLOYMENT: str
    AZURE_OPENAI_ENDPOINT: str
    
    # LlamaParse Configuration
    LLAMA_CLOUD_API_KEY: str
    
    # Celery & Redis Configuration
    REDIS_URL: str = "redis://localhost:6379/12"
    CELERY_BROKER_URL: str = "redis://localhost:6379/12"
    CELERY_RESULT_BACKEND: str = "redis://localhost:6379/12"
    
    # Pusher Configuration (optional - for real-time progress updates)
    PUSHER_APP_ID: str = ""
    PUSHER_KEY: str = ""
    PUSHER_SECRET: str = ""
    PUSHER_CLUSTER: str = "us2"  # e.g., 'us2', 'eu', 'ap1'

    def getDbConnectionUri(self) -> str:
        return f"postgresql+psycopg2://{self.DB_USERNAME}:{self.DB_PASSWORD}@{self.DB_HOST}:{self.DOCKER_DB_PORT}/{self.DB_NAME}"

    class Config:
        env_file = ".env"
        extra = "allow"


settings = Settings()
