import os

# Configuration constants for the SWIPER application
# --------------------------------------------------
# Centralising these values avoids circular imports
# and makes it easy to update paths / ports later

# Base directory of the repo (this file lives in the project root)
BASE_DIR = os.path.dirname(os.path.abspath(__file__))

# Paths to the folders that contain source images. Add as many as you like.
IMAGE_DIRS = [
    "/mnt/secret-items/sd-outputs/Sorted/Images/Portrait",
    "/mnt/secret-items/sd-outputs/Sorted/Images/Landscape",
]

# Backwards-compatibility: first directory
IMAGE_DIR = IMAGE_DIRS[0]

from typing import Optional

# SQLite database file that stores selections & metadata
DB_PATH = os.path.join(BASE_DIR, "data/image_selections.db")

# Default port for the HTTP server
PORT = 8000

# ---------------------------------------------------------------------------
# NSFW detection configuration
# ---------------------------------------------------------------------------
# List of keywords that, if present in an image's prompt data, should mark the
# image as NSFW. Feel free to customise this list as appropriate for your own
# needs.
NSFW_KEYWORDS = [
    "nude",
    "nudity",
    "porn",
    "explicit",
    "sexual",
    "sex",
    "boobs",
    "nipples",
    "penis",
    "vagina",
    "pussy",
    "cum",
    "fellatio",
    "blowjob",
    "cunnilingus",
    "paizuri",
    "rape",
    "handjob",
    "lingerie",
    "bikini",
    "latex",
    "saliva",
    "ass",
    "condom",
    ]

# ---------------------------------------------------------------------------
# Utility helpers
# ---------------------------------------------------------------------------

def find_image_file(rel_path: str) -> Optional[str]:
    """Return absolute path to `rel_path` by searching all IMAGE_DIRS.

    Returns None if file is not found in any configured directory.
    """
    for base in IMAGE_DIRS:
        abs_path = os.path.join(base, rel_path)
        if os.path.exists(abs_path):
            return abs_path
    return None
