"""تنظیمات برنامه: پیکربندی توسعه و تولید (هر دو SQLite — تولید روی هاست cPanel)."""
import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent

APP_NAME = "طلا و جواهر یاس"
APP_VERSION = "1.0.0-web"
SUPPORT_PHONE = "021-00000000"

# صفحاتی که میشه دسترسی جداگانه براشون تعریف کرد (دقیقا مطابق برنامه دسکتاپ)
PAGE_PERMISSIONS = [
    ("dashboard", "صفحه اصلی"),
    ("customer_profile", "پرونده مشتری"),
    ("customer_account", "افزودن/حذف مشتری"),
    ("weight_management", "مدیریت وزن"),
    ("reports", "گزارشات"),
    ("tasks", "تسک‌ها"),
    ("tag_admin", "افزونه (تگ‌ها)"),
    ("calls", "تماس‌ها"),
    ("accounts", "حساب‌ها"),
    ("settings", "تنظیمات"),
]

# نگاشت صفحات فرعی به دسترسی صفحه مادر (مطابق main_window.py دسکتاپ)
PERMISSION_KEY_MAP = {
    "customer_profile": "dashboard",
    "task_result": "tasks",
    "call_detail": "calls",
}

ADMIN_ROLE = "admin"
DEFAULT_ROLE = "salesperson"

TASK_CATEGORIES = [
    {"key": "call_today", "title": "تماس امروز", "color": "#E24444", "description": "مشتری‌هایی که تاریخ تماس بعدی‌شون امروزه"},
    {"key": "vip_inactive", "title": "VIP بدون خرید", "color": "#3DDC84", "description": "مشتری VIP که بیش از دو هفته از آخرین تماسش گذشته"},
    {"key": "sleeping", "title": "مشتری خوابیده", "color": "#E8C93D", "description": "مشتری‌هایی که قبلاً باهاشون تماس گرفتیم ولی بیش از دو ماه از آخرین تماسشون گذشته"},
    {"key": "not_presented", "title": "پرزنت نشده", "color": "#4A9DE8", "description": "مشتری‌هایی که هیچ‌وقت تماس نگرفتیم و هنوز هیچ خریدی نداشتن"},
    {"key": "call_next_week", "title": "تماس هفته آینده", "color": "#9B59E8", "description": "مشتری‌هایی که هفته آینده باید تماس گرفته بشن"},
    {"key": "follow_up_week", "title": "پیگیری این هفته", "color": "#E85CA8", "description": "مشتری‌هایی که این هفته (از شنبه) باهاشون تماس گرفته شده"},
]

CUSTOMER_RATINGS = ["A+", "A", "B", "C", "D"]

# مشتری‌ای که این‌قدر روز تماس یا خریدی نداشته «خواب» حساب می‌شه (تسک «مشتری خوابیده» و وضعیت خودکار)
SLEEPING_AFTER_DAYS = 60

# لیست‌های طولانی به‌صورت پیش‌فرض فقط این تعداد ردیف نشون می‌دن (بقیه با دکمه «نمایش تمامی ...»)
LIST_PAGE_SIZE = 50


class BaseConfig:
    APP_NAME = APP_NAME
    # اگر روی هاست ست نشده باشه، create_app یک کلید تصادفی دائمی در instance/secret_key می‌سازه
    SECRET_KEY = os.environ.get("SECRET_KEY")
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SESSION_COOKIE_HTTPONLY = True
    SESSION_COOKIE_SAMESITE = "Lax"
    PERMANENT_SESSION_LIFETIME = 60 * 60 * 10  # 10 ساعت
    MAX_CONTENT_LENGTH = 8 * 1024 * 1024  # حداکثر حجم آپلود (۸ مگابایت، برای عکس مشتری)
    PHOTO_STORAGE_BACKEND = os.environ.get("PHOTO_STORAGE_BACKEND", "local")  # 'local' یا 's3'
    LOCAL_PHOTO_DIR = BASE_DIR / "instance" / "customer_photos"


class DevConfig(BaseConfig):
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = os.environ.get(
        "DATABASE_URL", f"sqlite:///{BASE_DIR / 'instance' / 'dev.db'}"
    )
    SESSION_COOKIE_SECURE = False


class ProdConfig(BaseConfig):
    DEBUG = False
    # پیش‌فرض یک فایل SQLite داخل instance/ روی خود هاست است؛ اگر بعداً DATABASE_URL
    # (مثلاً یک آدرس MySQL/Postgres) ست بشه، همون اولویت داره.
    SQLALCHEMY_DATABASE_URI = os.environ.get(
        "DATABASE_URL", f"sqlite:///{BASE_DIR / 'instance' / 'prod.db'}"
    ).replace("postgres://", "postgresql://", 1)
    SESSION_COOKIE_SECURE = True


CONFIG_MAP = {"development": DevConfig, "production": ProdConfig}
