"""
Configuration management for Google Alerts Reporter Web App
"""
from pydantic_settings import BaseSettings
from pydantic import Field
from typing import List
import os
from pathlib import Path


class Settings(BaseSettings):
    """Application settings loaded from environment variables."""

    # Application
    app_name: str = Field(default="Google Alerts Reporter", env="APP_NAME")
    app_version: str = Field(default="2.0.0", env="APP_VERSION")
    debug: bool = Field(default=False, env="DEBUG")
    host: str = Field(default="0.0.0.0", env="HOST")
    port: int = Field(default=8000, env="PORT")

    # Security
    secret_key: str = Field(..., env="SECRET_KEY")
    admin_username: str = Field(default="admin", env="ADMIN_USERNAME")
    admin_password: str = Field(..., env="ADMIN_PASSWORD")
    session_timeout: int = Field(default=60, env="SESSION_TIMEOUT")

    # xAI API
    xai_api_key: str = Field(default="", env="XAI_API_KEY")
    xai_api_url: str = Field(
        default="https://api.x.ai/v1/chat/completions",
        env="XAI_API_URL"
    )
    xai_model: str = Field(default="grok-beta", env="XAI_MODEL")

    # Gmail API
    alerts_sender: str = Field(
        default="alerts-noreply@google.com",
        env="ALERTS_SENDER"
    )
    gmail_credentials_path: str = Field(
        default="../credentials.json",
        env="GMAIL_CREDENTIALS_PATH"
    )
    gmail_token_path: str = Field(
        default="../token.json",
        env="GMAIL_TOKEN_PATH"
    )

    # Analysis
    search_query: str = Field(default="Banco Master", env="SEARCH_QUERY")
    num_emails: int = Field(default=2, env="NUM_EMAILS")
    auto_refresh_interval: int = Field(default=21600, env="AUTO_REFRESH_INTERVAL")

    # Reports
    reports_dir: str = Field(default="./reports", env="REPORTS_DIR")
    max_reports_stored: int = Field(default=30, env="MAX_REPORTS_STORED")

    # Logging
    log_level: str = Field(default="INFO", env="LOG_LEVEL")
    log_file: str = Field(default="./logs/app.log", env="LOG_FILE")

    # Rate Limiting
    rate_limit_per_minute: int = Field(default=30, env="RATE_LIMIT_PER_MINUTE")

    # CORS
    cors_origins: str = Field(
        default="http://localhost:8000,http://127.0.0.1:8000",
        env="CORS_ORIGINS"
    )

    # Historical Data
    enable_historical: bool = Field(default=True, env="ENABLE_HISTORICAL")
    historical_days: int = Field(default=7, env="HISTORICAL_DAYS")
    historical_dir: str = Field(default="./data/historical", env="HISTORICAL_DIR")

    # Email Notifications
    email_enabled: bool = Field(default=False, env="EMAIL_ENABLED")
    smtp_host: str = Field(default="smtp.gmail.com", env="SMTP_HOST")
    smtp_port: int = Field(default=587, env="SMTP_PORT")
    smtp_user: str = Field(default="", env="SMTP_USER")
    smtp_password: str = Field(default="", env="SMTP_PASSWORD")
    email_from: str = Field(default="", env="EMAIL_FROM")
    email_to: str = Field(default="", env="EMAIL_TO")
    email_subject: str = Field(default="Relatório de Crise", env="EMAIL_SUBJECT")
    email_daily_report: bool = Field(default=False, env="EMAIL_DAILY_REPORT")
    email_daily_time: str = Field(default="08:00", env="EMAIL_DAILY_TIME")

    # WhatsApp Notifications (Twilio)
    whatsapp_enabled: bool = Field(default=False, env="WHATSAPP_ENABLED")
    twilio_account_sid: str = Field(default="", env="TWILIO_ACCOUNT_SID")
    twilio_auth_token: str = Field(default="", env="TWILIO_AUTH_TOKEN")
    twilio_whatsapp_from: str = Field(default="", env="TWILIO_WHATSAPP_FROM")
    twilio_whatsapp_to: str = Field(default="", env="TWILIO_WHATSAPP_TO")
    whatsapp_threshold: int = Field(default=70, env="WHATSAPP_THRESHOLD")

    # Slack Notifications
    slack_enabled: bool = Field(default=False, env="SLACK_ENABLED")
    slack_webhook_url: str = Field(default="", env="SLACK_WEBHOOK_URL")
    slack_channel: str = Field(default="#crise-alerts", env="SLACK_CHANNEL")
    slack_username: str = Field(default="Alerts Reporter Bot", env="SLACK_USERNAME")

    # Presentation Mode
    presentation_auto_refresh: int = Field(default=300, env="PRESENTATION_AUTO_REFRESH")
    presentation_fullscreen: bool = Field(default=True, env="PRESENTATION_FULLSCREEN")

    # Backup
    backup_enabled: bool = Field(default=True, env="BACKUP_ENABLED")
    backup_dir: str = Field(default="./backup", env="BACKUP_DIR")
    backup_retention_days: int = Field(default=30, env="BACKUP_RETENTION_DAYS")

    # Production
    domain: str = Field(default="localhost", env="DOMAIN")

    @property
    def cors_origins_list(self) -> List[str]:
        """Parse CORS origins string into list."""
        return [origin.strip() for origin in self.cors_origins.split(",")]

    class Config:
        env_file = ".env"
        env_file_encoding = "utf-8"
        case_sensitive = False


# Global settings instance
settings = Settings()

# Create required directories
Path(settings.reports_dir).mkdir(parents=True, exist_ok=True)
Path(settings.log_file).parent.mkdir(parents=True, exist_ok=True)
if settings.enable_historical:
    Path(settings.historical_dir).mkdir(parents=True, exist_ok=True)
