# ==========================================
# CONFIG (FINAL - STABLE WEBHOOK VERSION)
# ==========================================

import os
from dotenv import load_dotenv
from pathlib import Path

# ==========================================
# LOAD ENV
# ==========================================
BASE_DIR = Path(__file__).resolve().parent
ENV_PATH = BASE_DIR / ".env"

if ENV_PATH.exists():
    load_dotenv(dotenv_path=ENV_PATH)
    print("ENV LOADED")
else:
    print("ENV NOT FOUND:", ENV_PATH)


# ==========================================
# HELPERS
# ==========================================
def get_env(name, default=None, required=False):
    value = os.getenv(name, default)

    if value is not None:
        value = str(value).strip()

    if required and (value is None or value == ""):
        raise ValueError(f"Missing env: {name}")

    return value


def get_int(name, default=0):
    try:
        return int(get_env(name, default))
    except:
        print(f"INVALID INT ENV: {name}")
        return default


def get_bool(name, default=False):
    value = str(get_env(name, default)).lower()
    return value in ["true", "1", "yes"]


def get_list_int(name):
    raw = str(get_env(name, "")).replace(",", " ")
    return [int(x) for x in raw.split() if x.strip().lstrip("-").isdigit()]


# ==========================================
# BOT
# ==========================================
API_ID = get_int("API_ID")
API_HASH = get_env("API_HASH", required=True)
BOT_TOKEN = get_env("BOT_TOKEN", required=True)

SESSION = get_env("SESSION", "bot")
WORKERS = 1  # 🔥 WAJIB 1 di shared hosting

if not API_ID:
    raise ValueError("API_ID invalid")


# ==========================================
# OWNER
# ==========================================
OWNER_ID = get_int("OWNER_ID")
ADMINS = get_list_int("ADMINS")


# ==========================================
# DATABASE
# ==========================================
DB_URI = get_env("DB_URI", required=True)
DB_NAME = get_env("DB_NAME", required=True)


# ==========================================
# FORCE SUB
# ==========================================
def parse_fsubs():
    raw = str(get_env("FSUBS", "")).strip()
    result = []

    if not raw:
        return result

    for item in raw.split():
        parts = item.split(",")

        try:
            cid = int(parts[0])
        except:
            continue

        req = False
        if len(parts) > 1:
            req = parts[1].lower() == "true"

        try:
            limit = int(parts[2]) if len(parts) > 2 else 0
        except:
            limit = 0

        result.append((cid, req, limit))

    print("FSUBS:", result)
    return result


FSUBS = parse_fsubs()


# ==========================================
# CHANNEL
# ==========================================
DB_CHANNEL = get_int("DB_CHANNEL")

if not DB_CHANNEL:
    raise ValueError("DB_CHANNEL invalid")


# ==========================================
# SHORTLINK
# ==========================================
SHORT_URL = get_env("SHORT_URL")
SHORT_API = get_env("SHORT_API")
SHORT_TUT = get_env("SHORT_TUT", "")


# ==========================================
# FEATURES
# ==========================================
AUTO_DEL = get_int("AUTO_DEL", 0)
PROTECT_CONTENT = get_bool("PROTECT_CONTENT", False)
DISABLE_BUTTON = get_bool("DISABLE_BUTTON", False)


# ==========================================
# MESSAGES
# ==========================================
MESSAGES = {
    "START": "Halo!\nKirim file untuk membuat link.",
    "FORCE_SUB": "Kamu belum join channel!",
    "SHORTLINK": "Selesaikan shortlink dulu!",
    "SUCCESS": "File berhasil dikirim.",
    "ERROR": "Terjadi kesalahan."
}