"""AFK system — mark yourself as away with auto-response."""
from __future__ import annotations

import logging
import time
from datetime import datetime

from telegram import Update
from telegram.constants import ParseMode
from telegram.ext import ContextTypes

from bot import db
from bot.helpers import user_link
from bot.persian_router import register_mixed

logger = logging.getLogger(__name__)


async def afk_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Mark yourself as AFK: /afk [reason]"""
    user = update.effective_user
    chat = update.effective_chat
    args = (update.message.text or "").split(maxsplit=1)
    reason = args[1] if len(args) > 1 else "دلیلی ندارم"

    await db.set_afk(chat.id, user.id, reason)
    await update.message.reply_text(
        f"🌙 {user.first_name} از حالا AFK هست:\n"
        f"📝 {reason}",
        parse_mode=ParseMode.HTML,
    )


async def back_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Mark yourself as back: /back"""
    user = update.effective_user
    chat = update.effective_chat

    afk_data = await db.get_afk(chat.id, user.id)
    if not afk_data:
        await update.message.reply_text("✅ شما AFK نبودید!")
        return

    await db.remove_afk(chat.id, user.id)
    duration = int(time.time()) - afk_data['since']
    minutes = duration // 60

    await update.message.reply_text(
        f"☀️ {user.first_name} برگشت!\n"
        f"⏱ مدت AFK: {minutes} دقیقه",
        parse_mode=ParseMode.HTML,
    )


async def check_afk(chat_id: int, user_id: int, bot) -> str | None:
    """Check if a user is AFK. Returns AFK message or None."""
    afk_data = await db.get_afk(chat_id, user_id)
    if not afk_data:
        return None

    since = afk_data['since']
    reason = afk_data['reason']
    duration = int(time.time()) - since
    minutes = duration // 60

    if minutes < 1:
        time_str = f"{duration} ثانیه"
    elif minutes < 60:
        time_str = f"{minutes} دقیقه"
    else:
        hours = minutes // 60
        time_str = f"{hours} ساعت و {minutes % 60} دقیقه"

    return (
        f"🌙 <b>{afk_data['first_name']}</b> الان AFK هست.\n"
        f"⏱ از {time_str} پیش\n"
        f"📝 {reason}"
    )


def register(app) -> None:
    register_mixed(
        app,
        {
            "afk": afk_cmd,
            "back": back_cmd,
        },
        {
            "رفتم": afk_cmd,
            "برگشتم": back_cmd,
            "نیستم": afk_cmd,
            "هستم": back_cmd,
            "AFK": afk_cmd,
        },
    )
