from pathlib import Path
from cryptography.fernet import Fernet
from pydantic_settings import BaseSettings, SettingsConfigDict

ROOT = Path(__file__).resolve().parents[2]

class Settings(BaseSettings):
    app_env: str = 'development'
    api_host: str = '0.0.0.0'
    api_port: int = 8080
    public_url: str = 'http://localhost:8080'
    jwt_secret: str = 'development-only-change-after-installation'
    jwt_algorithm: str = 'HS256'
    access_token_minutes: int = 30
    fernet_key: str = Fernet.generate_key().decode()
    metadata_database_url: str = f"sqlite:///{(ROOT / 'storage' / 'metadata.db').as_posix()}"
    redis_url: str = 'redis://localhost:6379/0'
    redis_optional: bool = True
    storage_backend: str = 'local'
    local_storage_path: str = str(ROOT / 'storage' / 'data')
    s3_endpoint: str = ''
    s3_access_key: str = ''
    s3_secret_key: str = ''
    s3_bucket: str = 'chemitec-datalake'
    s3_secure: bool = False
    default_admin_email: str = 'admin@localhost'
    default_admin_password: str = 'ChangeThisPassword123!'
    default_admin_name: str = 'Administrador'
    max_extract_rows: int = 5_000_000
    query_timeout_seconds: int = 1800
    native_install: bool = False
    vapid_private_key: str = ''
    vapid_public_key: str = ''
    vapid_subject: str = 'mailto:admin@chemitec.com.br'
    observability_metrics_token: str = 'CHANGE_ME_MONITORING_TOKEN'
    otel_exporter_otlp_endpoint: str = ''
    observability_retention_days: int = 30
    cluster_node_name: str = 'cedp-node-1'
    cluster_node_type: str = 'api'
    cluster_region: str = 'primary'
    cluster_zone: str = 'zone-a'
    cluster_advertise_address: str = ''
    cluster_heartbeat_seconds: int = 15
    cluster_node_timeout_seconds: int = 60
    cluster_lease_seconds: int = 45
    backup_enabled: bool = True
    backup_work_dir: str = str(ROOT / 'storage' / 'backups')
    backup_max_bytes: int = 5_000_000_000

    model_config = SettingsConfigDict(env_file=ROOT / '.env', case_sensitive=False, extra='ignore')

settings = Settings()
