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. Can be overridden at runtime
# via the IMAGE_DIRS environment variable (colon-separated paths).
_IMAGE_DIRS_DEFAULT = [
    "/media/Portrait",
    "/media/Landscape",
]

_IMAGE_DIRS_ENV = os.getenv("IMAGE_DIRS")
if _IMAGE_DIRS_ENV:
    IMAGE_DIRS = _IMAGE_DIRS_ENV.split(":")
else:
    IMAGE_DIRS = _IMAGE_DIRS_DEFAULT

# Backwards-compatibility: first directory
IMAGE_DIR = IMAGE_DIRS[0] if IMAGE_DIRS else ""
from typing import Optional

# Data directory (override with DATA_DIR env var)
DATA_DIR = os.getenv("DATA_DIR", BASE_DIR)

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

# Default port for the HTTP server (override with PORT env var)
PORT = int(os.getenv("PORT", 8888))

# ---------------------------------------------------------------------------
# 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
