"""Inline keyboard layouts for the Persian administrator UI."""

from __future__ import annotations

from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from aiogram.utils.keyboard import InlineKeyboardBuilder

from app.database.models import Job, JobStatus
from app.keyboards.callbacks import AddCB, AdminCB, JobCB, MenuCB, SettingsCB


def _button(text: str, callback_data: object) -> InlineKeyboardButton:
    return InlineKeyboardButton(text=text, callback_data=callback_data.pack())


def main_menu(*, is_admin: bool) -> InlineKeyboardMarkup:
    builder = InlineKeyboardBuilder()
    if is_admin:
        builder.row(_button("➕ افزودن ویدئو", AddCB(action="prompt")))
        builder.row(
            _button("📊 وضعیت", JobCB(action="status")),
            _button("🗂 عملیات‌ها", JobCB(action="list", job_id="active")),
        )
        builder.row(
            _button("📜 تاریخچه", JobCB(action="history")),
            _button("⚙️ تنظیمات", SettingsCB(action="menu")),
        )
        builder.row(_button("🧭 راهنما", MenuCB(action="help")))
    else:
        builder.row(_button("🧭 راهنما", MenuCB(action="help")))
    return builder.as_markup()


def add_prompt_keyboard() -> InlineKeyboardMarkup:
    builder = InlineKeyboardBuilder()
    builder.row(_button("لغو", AddCB(action="cancel")))
    return builder.as_markup()


def job_actions_keyboard(job: Job) -> InlineKeyboardMarkup:
    builder = InlineKeyboardBuilder()
    if job.status == JobStatus.PAUSED:
        builder.row(
            _button("▶️ ادامه", JobCB(action="resume", job_id=job.id)),
            _button("🚫 لغو", JobCB(action="cancel", job_id=job.id)),
        )
    elif job.status in {JobStatus.PENDING, JobStatus.RUNNING}:
        builder.row(
            _button("⏸ توقف", JobCB(action="pause", job_id=job.id)),
            _button("🚫 لغو", JobCB(action="cancel", job_id=job.id)),
        )
    builder.row(
        _button("🔄 به‌روزرسانی", JobCB(action="refresh", job_id=job.id)),
        _button("↩️ بازگشت", JobCB(action="list", job_id="active")),
    )
    return builder.as_markup()


def jobs_list_keyboard(
    jobs: list[Job],
    *,
    mode: str,
    show_all_button: bool,
    show_active_button: bool,
) -> InlineKeyboardMarkup:
    builder = InlineKeyboardBuilder()
    for job in jobs[:10]:
        icon = {
            JobStatus.PENDING: "🕓",
            JobStatus.RUNNING: "⚙️",
            JobStatus.PAUSED: "⏸",
            JobStatus.COMPLETED: "✅",
            JobStatus.FAILED: "❌",
            JobStatus.CANCELLED: "🚫",
        }.get(job.status, "•")
        label = f"{icon} {job.short_id} — {job.uploaded_videos}/{job.total_videos}"
        builder.row(_button(label, JobCB(action="view", job_id=job.id)))
    if show_all_button:
        builder.row(_button("📚 همه عملیات‌ها", JobCB(action="list", job_id="all")))
    if show_active_button:
        builder.row(_button("🟢 فقط فعال‌ها", JobCB(action="list", job_id="active")))
    builder.row(
        _button("🔄 به‌روزرسانی", JobCB(action="list", job_id=mode)),
        _button("🏠 منوی اصلی", MenuCB(action="home")),
    )
    return builder.as_markup()


def history_keyboard() -> InlineKeyboardMarkup:
    builder = InlineKeyboardBuilder()
    builder.row(
        _button("🔄 به‌روزرسانی", JobCB(action="history")),
        _button("🏠 منوی اصلی", MenuCB(action="home")),
    )
    return builder.as_markup()


def status_keyboard(latest: Job | None) -> InlineKeyboardMarkup:
    builder = InlineKeyboardBuilder()
    if latest is not None:
        builder.row(_button("📄 جزئیات آخرین عملیات", JobCB(action="view", job_id=latest.id)))
    builder.row(
        _button("🔄 به‌روزرسانی", JobCB(action="status")),
        _button("🏠 منوی اصلی", MenuCB(action="home")),
    )
    return builder.as_markup()


def settings_keyboard() -> InlineKeyboardMarkup:
    builder = InlineKeyboardBuilder()
    builder.row(
        _button("✏️ تنظیم مقصد", SettingsCB(action="destination")),
        _button("📨 آزمون ارسال", SettingsCB(action="test")),
    )
    builder.row(
        _button("🗑 حذف مقصد ذخیره‌شده", SettingsCB(action="clear")),
    )
    builder.row(
        _button("🔄 به‌روزرسانی", SettingsCB(action="refresh")),
        _button("🏠 منوی اصلی", MenuCB(action="home")),
    )
    return builder.as_markup()


def destination_prompt_keyboard() -> InlineKeyboardMarkup:
    builder = InlineKeyboardBuilder()
    builder.row(_button("لغو", SettingsCB(action="menu")))
    return builder.as_markup()


def admin_keyboard() -> InlineKeyboardMarkup:
    builder = InlineKeyboardBuilder()
    builder.row(
        _button("🔄 به‌روزرسانی", AdminCB(action="refresh")),
        _button("🏠 منوی اصلی", MenuCB(action="home")),
    )
    return builder.as_markup()
