"""
Application configuration settings
"""

import os
from pydantic_settings import BaseSettings
from typing import List, Optional, Dict, Any


class Settings(BaseSettings):
    """Application settings"""
    
    # API settings
    API_TITLE: str = "MangoIT RAG-based AI Chatbot"
    API_DESCRIPTION: str = "AI-powered chatbot with RAG capabilities for MangoIT Solutions"
    API_VERSION: str = "1.0.0"
    
    # Database settings
    DEFAULT_COLLECTION: str = os.getenv("RAG_COLLECTION", "mangoit_docs")
    DATABASE_URL: str = os.getenv("DATABASE_URL", "mysql+pymysql://root:@localhost:3306/mangoitchatdb")
    
    # Embedding settings
    DEFAULT_CHUNK_SIZE: int = 500
    DEFAULT_CHUNK_OVERLAP: int = 50
    DEFAULT_EMBEDDING_MODEL: str = "all-MiniLM-L6-v2"
    
    # LLM settings
    GEMINI_API_KEY: Optional[str] = os.getenv("GEMINI_API_KEY")
    GEMINI_API_URL: str = os.getenv(
        "GEMINI_API_URL", 
        "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent"
    )
    GEMINI_MODEL: str = "gemini-2.0-flash"
    
    # Additional LLM settings from environment
    GROQ_API_KEY: Optional[str] = os.getenv("GROQ_API_KEY")
    LLM_PROVIDER: Optional[str] = os.getenv("LLM_PROVIDER", "gemini")
    LLM_TEMPERATURE: Optional[float] = float(os.getenv("LLM_TEMPERATURE", "0.5"))
    LLM_MODEL: Optional[str] = os.getenv("LLM_MODEL", "gemini-2.0-flash")
    GROQ_MODEL: Optional[str] = os.getenv("GROQ_MODEL", "gemma2-9b-it")
    
    # Conversation settings
    CONVERSATION_MEMORY_DAYS: int = 30
    MAX_CONVERSATIONS: int = 1000
    MAX_HISTORY: int = 50
    
    # File paths
    PAGES_MARKDOWN_DIR: str = "markdown-data/pages_markdown"
    POSTS_MARKDOWN_DIR: str = "markdown-data/posts_markdown"
    CONVERSATION_DATA_DIR: str = "conversation_data"
    
    # Agent settings
    AGENT_NAME: str = "Sam"
    COMPANY_NAME: str = "MangoIT Solutions"
    SHORT_GREETINGS: bool = True
    RESPONSE_LENGTH: str = "concise"  # Options: "concise", "standard", "detailed"

    # Additional environment variables
    FIRECRAWL_API_KEY: Optional[str] = os.getenv("FIRECRAWL_API_KEY")
    WEBSITE_URL_TO_CRAWL: Optional[str] = os.getenv("WEBSITE_URL_TO_CRAWL")
    MYSQL_USER: Optional[str] = os.getenv("MYSQL_USER")
    MYSQL_HOST: Optional[str] = os.getenv("MYSQL_HOST")
    MYSQL_DB: Optional[str] = os.getenv("MYSQL_DB")
    
    # RAG settings
    RAG_COLLECTION: Optional[str] = os.getenv("RAG_COLLECTION", "BGE-large-en")
    EMBED_BACKEND: Optional[str] = os.getenv("EMBED_BACKEND", "bge-large-en-v1.5")
    SITE_COLLECTION_BASE: Optional[str] = os.getenv("SITE_COLLECTION_BASE", "mangoit_site_all-MiniLM-L6-v2")
    BLOG_COLLECTION_BASE: Optional[str] = os.getenv("BLOG_COLLECTION_BASE", "mangoit_blog_all-MiniLM-L6-v2")
    
    # API and Frontend settings
    API_HOST: Optional[str] = os.getenv("API_HOST", "localhost")
    API_PORT: Optional[str] = os.getenv("API_PORT", "8000")
    FRONTEND_HOST: Optional[str] = os.getenv("FRONTEND_HOST", "localhost")
    FRONTEND_PORT: Optional[str] = os.getenv("FRONTEND_PORT", "5173")
    ENABLE_QUERY_EXPANSION: Optional[bool] = os.getenv("ENABLE_QUERY_EXPANSION", "False").lower() == "true"

    class Config:
        env_file = ".env"
        case_sensitive = True


# Create a singleton instance
settings = Settings()
