import os
from pathlib import Path
from datetime import timedelta, time
from zoneinfo import ZoneInfo

# --- Базовые пути ---
BASE_DIR = Path(__file__).parent
FONT_PATH = BASE_DIR / "impact.ttf"
DEFAULT_TZ = os.getenv("TZ", "Europe/Moscow")
DATABASE_URL = os.getenv("DATABASE_URL", "postgresql://bot:botpass@postgres:5432/botdb")

# --- Настройки /penis ---
PENIS_START_LENGTH = 10.0
PENIS_MIN_DELTA = 0.1
PENIS_MAX_DELTA = 7.0
PENIS_COOLDOWN = timedelta(hours=24)
PENIS_COOLDOWN_SECONDS = int(PENIS_COOLDOWN.total_seconds())
PENIS_TOP_LIMIT = 10

# --- Настройки "получается" ---
POLYCHAETSI_STATS_PATH = Path(os.getenv("POLYCHAETSI_STATS_PATH", "/db/polychaetsi_stats.json"))
POLYCHAETSI_TARGET = "получается"
POLYCHAETSI_TOP_LIMIT = 10
POLYCHAETSI_IMAGE_PATH = BASE_DIR / "maket" / "cvetok.jpg"

# --- Казино ---
CASINO_MAX_BET = 1.0

# --- E621 API ---
E621_LOGIN = os.getenv("E621_LOGIN", "")
E621_API_KEY = os.getenv("E621_API_KEY", "")

# --- Ставки на матчи ---
ODDS_API_KEY = os.getenv("ODDS_API_KEY", "")
ODDS_API_BASE = "https://api.the-odds-api.com/v4"
BET_MAX_AMOUNT = 3.0
ODDS_SPORTS = {
    "dota2": "esports_dota2",
}
ODDS_CACHE_TTL = 86400  # 24 часа — экономим запросы (500/мес бесплатно)

# --- Nude ---
NUDE_HISTORY_PATH = Path(os.getenv("NUDE_HISTORY_PATH", "/db/nude_history.json"))
NUDE_POSTS_PER_PAGE = int(os.getenv("NUDE_POSTS_PER_PAGE", "100"))
NUDE_POSTS_POOL_TARGET = int(os.getenv("NUDE_POSTS_POOL_TARGET", "1200"))
NUDE_MAX_POSTS_TO_SCAN = int(os.getenv("NUDE_MAX_POSTS_TO_SCAN", "2000"))
NUDE_MIN_UNSEEN_POOL = int(os.getenv("NUDE_MIN_UNSEEN_POOL", "100"))
NUDE_HISTORY_MAX_SIZE = int(os.getenv("NUDE_HISTORY_MAX_SIZE", "5000"))

# --- Magnit API ---
MAGNIT_API_BASE_URL = os.getenv("MAGNIT_API_BASE_URL", "https://mirror.porno4free.ru/magnit")
MAGNIT_STORE_CODE = os.getenv("MAGNIT_STORE_CODE", "618224")
MAGNIT_REQUEST_TIMEOUT = int(os.getenv("MAGNIT_REQUEST_TIMEOUT", "15"))
# Можно указывать просто строку с названием или словарь с query/label/store_code.
MAGNIT_PRODUCTS = [
    "RedBull",
]

# --- Конфигурация макетов ---
TEMPLATES = {
    "1": {
        "path": BASE_DIR / "maket" / "1.png",
        "anchor": (104, 240),
        "padding": 20,
        "label": "Владимир Владимирович Путин самый лучший президент",
    },
    "2": {
        "path": BASE_DIR / "maket" / "2.png",
        "anchor": (40, 40),
        "box_size": (582, 346),
        "label": "Макет 2",
    },
}

# --- Расписание ---
def make_time(h: int, m: int) -> time:
    return time(hour=h, minute=m)

# Если у тебя наоборот, просто поменяй на False.
UPPER_WEEK_IS_ODD = True

PAIR_TIMES = {
    1: (make_time(8, 0), make_time(9, 35)),
    2: (make_time(9, 50), make_time(11, 25)),
    3: (make_time(11, 55), make_time(13, 30)),
    4: (make_time(13, 45), make_time(15, 20)),
    5: (make_time(15, 50), make_time(17, 25)),
}

LESSON_SCHEDULE = {
    "upper": {
        0: [
            {"pair": 1, "title": "Пары нету"},
            {"pair": 2, "title": "История Россия (семинар), каб. 504"},
            {"pair": 3, "title": "Первая Подгруппа: Основы программирование, каб. 606. Вторая подгруппа Глод."},
            {"pair": 4, "title": "Первая Подгруппа: Глод. Вторая подгруппа Основы программирование, каб 606"},
            {"pair": 5, "title": "Общекулутрная и профессиональная коммуникации."},
        ],
        1: [
            {"pair": 1, "title": "Нету пары"},
            {"pair": 2, "title": "Физика (лаб), каб. 241"},
            {"pair": 3, "title": "Математика (лек), каб 514"},
        ],
        2: [
            {"pair": None, "title": "Англ ебучий"},
        ],
        3: [
            {"pair": 1, "title": "Физика (лек), каб 245"},
            {"pair": 2, "title": "Физика (прак), каб 245"},
            {"pair": 3, "title": "Маетимака (прак), каб 503"},
            {"pair": 4, "title": "Безопасность жизнедятельности (прак) каб 503"},
            {"pair": 5, "title": "Общекультурная и профессиональная коммуникации (прак), каб 503"},
        ],
        4: [
            {"pair": 1, "title": "Нету пары"},
            {"pair": 2, "title": "История России (лек), каб 510"},
            {"pair": 3, "title": "Основы программирования (лек), каб 510"},
            {"pair": 4, "title": "Физическая культура спорта (прак), каб 503"},
        ],
    },
    "lower": {
        0: [
            {"pair": 1, "title": "Пары нету"},
            {"pair": 2, "title": "История Россия (семинар), каб. 504"},
            {"pair": 3, "title": "Первая Подгруппа: Основы программирование, каб. 606. Вторая подгруппа Глод."},
            {"pair": 4, "title": "Первая Подгруппа: Глод. Вторая подгруппа Основы программирование, каб 606"},
            {"pair": 5, "title": "Общекулутрная и профессиональная коммуникации."},
        ],
        1: [
            {"pair": 1, "title": "Нету пары"},
            {"pair": 2, "title": "Физика (лаб), каб. 241"},
            {"pair": 3, "title": "Математика (лек), каб 514"},
            {"pair": 4, "title": "Математика (прак), каб 503"},
        ],
        2: [
            {"pair": None, "title": "Англ ебучий"},
        ],
        3: [
            {"pair": 1, "title": "Физика (лек), каб 245"},
            {"pair": 2, "title": "Физика (прак), каб 245"},
            {"pair": 3, "title": "Маетимака (прак), каб 503"},
            {"pair": 4, "title": "Безопасность жизнедятельности (прак) каб 503"},
            {"pair": 5, "title": "Общекультурная и профессиональная коммуникации (прак), каб 503"},
        ],
        4: [
            {"pair": 1, "title": "Нету пары"},
            {"pair": 2, "title": "История России (лек), каб 510"},
            {"pair": 3, "title": "Основы программирования (лек), каб 510"},
            {"pair": 4, "title": "Физическая культура спорта (прак), каб 503"},
        ],
    },
}

SCHEDULE = {
    0: [ # Понедельник
        (make_time(9, 50), make_time(10, 35), 5),
        (make_time(10, 40), make_time(11, 25), 30),
        (make_time(11, 55), make_time(12, 40), 5),
        (make_time(12, 45), make_time(13, 30), 15),
        (make_time(13, 45), make_time(14, 30), 5),
        (make_time(14, 35), make_time(15, 20), 30),
        (make_time(15, 50), make_time(16, 35), 5),
        (make_time(16, 40), make_time(17, 25), None),
    ],
    1: [ # Вторник
        (make_time(9, 50), make_time(10, 35), 5),
        (make_time(10, 40), make_time(11, 25), 30),
        (make_time(11, 55), make_time(12, 40), 5),
        (make_time(12, 45), make_time(13, 30), 15),
        (make_time(13, 45), make_time(14, 30), 5),
        (make_time(14, 35), make_time(15, 20), None),
    ],
    2: [], # Среда
    3: [ # Четверг
        (make_time(8, 0), make_time(8, 45), 5),
        (make_time(8, 50), make_time(9, 35), 15),
        (make_time(9, 50), make_time(10, 35), 5),
        (make_time(10, 40), make_time(11, 25), 30),
        (make_time(11, 55), make_time(12, 40), 5),
        (make_time(12, 45), make_time(13, 30), 15),
        (make_time(13, 45), make_time(14, 30), 5),
        (make_time(14, 35), make_time(15, 20), 30),
        (make_time(15, 50), make_time(16, 35), 5),
        (make_time(16, 40), make_time(17, 25), None),
    ],
    4: [ # Пятница
        (make_time(9, 50), make_time(10, 35), 5),
        (make_time(10, 40), make_time(11, 25), 30),
        (make_time(11, 55), make_time(12, 40), 5),
        (make_time(12, 45), make_time(13, 30), 15),
        (make_time(13, 45), make_time(14, 30), 5),
        (make_time(14, 35), make_time(15, 20), None),
    ],
}

# --- Остальное ---
KEYWORDS = {'крип', 'радиохэд', 'creep', 'radiohead'}

# --- Авто-ответы ИИ ---
AUTOREPLY_CHANCE = 0.10
AUTOREPLY_COOLDOWN = 120
AUTOREPLY_TRIGGERS = {'бот', 'фраер', 'кент', 'братуха', 'пацаны', 'чё как', 'базар', 'ебать', 'пизда', 'хуй', 'бля', 'сука', 'говно', 'пидор', 'пиздабол', 'пиздатый', 'пиздатая', 'пиздатое', 'пиздатые', 'пиздато', 'ваномас'}

def get_hint_text(templates_str: str) -> str:
    return (
        "Команды:\n"
        f"• /maket «id» «текст» — доступные: {templates_str}.\n"
        "• /gen_mem Up:верх Down:низ — отправь с фото.\n"
        "• /break — узнать время до перекура.\n"
        "• /schedule [пн|mon] — расписание; без аргумента еще текущая и следующая пара.\n"
        "• /penis — миниигра 1 раз в 24 часа.\n"
        "• /top_penis — топ по длине.\n"
        "• /talk [текст] — ИИ базарит на фене.\n"
        "• /penis_casino [ставка] — казино на размер.\n"
        "• /gadanie [тема] — гадание на фене с мемом.\n"
        "• /matches — матчи для ставок.\n"
        "• /bet [номер] [исход] [ставка] — поставить.\n"
        "• /mybets — мои активные ставки.\n"
        "• /bet_history — история ставок за месяц + статистика.\n"
        "• /sports_debug — диагностика API матчей.\n"
        "• /ebalnik — включить/выключить автоответы в чате.\n"
        "• /uwu [теги] — случайная картинка с e621.\n"
        "• /polychaetsi — топ по слову «получается».\n"
        "• /prices /fetch — цены и остатки Магнита.\n"
        "Подсказка: в группах пиши /команда@username_бота."
    )
