"""
==================================================
Smart Attendance AI
Application Settings
==================================================
Loads configuration from .env
==================================================
"""

import os

from dotenv import load_dotenv


# ==================================================
# Load Environment Variables
# ==================================================

load_dotenv()


# ==================================================
# Settings
# ==================================================

class Settings:

    # ==========================================
    # Application
    # ==========================================

    APP_NAME = "Smart Attendance AI"

    VERSION = "1.0.0"

    HOST = os.getenv(
        "HOST",
        "0.0.0.0"
    )

    PORT = int(
        os.getenv(
            "PORT",
            "8000"
        )
    )

    LOG_LEVEL = os.getenv(
        "LOG_LEVEL",
        "INFO"
    )

    # ==========================================
    # AI Model
    # ==========================================

    MODEL_NAME = os.getenv(
        "MODEL_NAME",
        "buffalo_l"
    )

    CTX_ID = int(
        os.getenv(
            "CTX_ID",
            "0"
        )
    )

    # ==========================================
    # Face Detection
    # ==========================================

    DETECTION_WIDTH = int(
        os.getenv(
            "DETECTION_WIDTH",
            "640"
        )
    )

    DETECTION_HEIGHT = int(
        os.getenv(
            "DETECTION_HEIGHT",
            "640"
        )
    )

    MIN_FACE_CONFIDENCE = float(
        os.getenv(
            "MIN_FACE_CONFIDENCE",
            "0.60"
        )
    )

    MAX_FACES_PER_IMAGE = int(
        os.getenv(
            "MAX_FACES_PER_IMAGE",
            "10"
        )
    )
    MIN_FACE_WIDTH = int(
    os.getenv("MIN_FACE_WIDTH", "60")
    )

    MIN_FACE_HEIGHT = int(
    os.getenv("MIN_FACE_HEIGHT", "60")
    )

    # ==========================================
    # Face Recognition
    # ==========================================

    FACE_MATCH_THRESHOLD = float(
        os.getenv(
            "FACE_MATCH_THRESHOLD",
            "0.70"
        )
    )

    SIMILARITY_THRESHOLD = float(
        os.getenv(
            "SIMILARITY_THRESHOLD",
            "0.65"
        )
    )

    EMBEDDING_SIZE = int(
        os.getenv(
            "EMBEDDING_SIZE",
            "512"
        )
    )

    # ==========================================
    # Image Processing
    # ==========================================

    AUTO_ROTATE_IMAGE = (
        os.getenv(
            "AUTO_ROTATE_IMAGE",
            "true"
        ).lower() == "true"
    )

    CONVERT_TO_RGB = (
        os.getenv(
            "CONVERT_TO_RGB",
            "true"
        ).lower() == "true"
    )

    # ==========================================
    # Image Upload
    # ==========================================

    MAX_IMAGE_SIZE_MB = int(
        os.getenv(
            "MAX_IMAGE_SIZE_MB",
            "5"
        )
    )

    ALLOWED_IMAGE_TYPES = [
        item.strip()
        for item in os.getenv(
            "ALLOWED_IMAGE_TYPES",
            "image/jpeg,image/jpg,image/png"
        ).split(",")
    ]

    MIN_IMAGE_WIDTH = int(
        os.getenv(
            "MIN_IMAGE_WIDTH",
            "160"
        )
    )

    MIN_IMAGE_HEIGHT = int(
        os.getenv(
            "MIN_IMAGE_HEIGHT",
            "160"
        )
    )

    
    # ==========================================
    # Training
    # ==========================================

    MIN_TRAIN_IMAGES = int(
    os.getenv(
        "MIN_TRAIN_IMAGES",
        "3"
        )
    )

    MAX_TRAIN_IMAGES = int(
    os.getenv(
        "MAX_TRAIN_IMAGES",
        "10"
        )
    )

    REQUIRE_SINGLE_FACE = (
        os.getenv(
        "REQUIRE_SINGLE_FACE",
        "true"
        ).lower() == "true"
    )

    ALLOW_DUPLICATE_IMAGES = (
        os.getenv(
        "ALLOW_DUPLICATE_IMAGES",
        "false"
        ).lower() == "true"
    )

    DUPLICATE_FACE_THRESHOLD = float(
    os.getenv(
        "DUPLICATE_FACE_THRESHOLD",
        "0.98"
        )
    )

    # ==========================================
    # Storage
    # ==========================================

    EMBEDDING_DIR = os.getenv(
        "EMBEDDING_DIR",
        "storage/embeddings"
    )

    CACHE_DIR = os.getenv(
        "CACHE_DIR",
        "storage/cache"
    )

    UNKNOWN_FACE_DIR = os.getenv(
        "UNKNOWN_FACE_DIR",
        "storage/unknown"
    )

    # ==========================================
    # Development
    # ==========================================

    DEBUG = (
        os.getenv(
            "DEBUG",
            "true"
        ).lower() == "true"
    )


# ==================================================
# Singleton Settings Instance
# ==================================================

settings = Settings()