"""Honest dashboard statistics and technical error reports."""

from __future__ import annotations

from aiogram import F, Router
from aiogram.types import CallbackQuery, Message

from app.context import AppContext
from app.handlers.common import show
from app.keyboards.inline import back_menu, errors_menu
from app.utils.validation import format_local

router = Router(name="statistics")


async def render_dashboard(event: Message | CallbackQuery, ctx: AppContext) -> None:
    dashboard = await ctx.statistics.dashboard()
    periods = dashboard.periods
    text = (
        "📊 آمار و گزارش‌ها\n\n"
        "این اعداد از دیتابیس محلی ربات هستند و بازدید کانال یا تعداد واقعی نمایش توسط تلگرام را نشان نمی‌دهند.\n\n"
        f"🎬 فایل‌های ثبت‌شده: {dashboard.media_total}\n"
        f"✅ پست‌های با وضعیت منتشرشده: {dashboard.posts_published}\n"
        f"📝 پیش‌نویس/آماده: {dashboard.posts_draft}\n"
        f"🕒 زمان‌بندی‌شده: {dashboard.posts_scheduled}\n"
        f"❌ پست‌های خطادار: {dashboard.posts_failed}\n"
        f"👥 کاربران ثبت‌شده: {dashboard.users_total}\n"
        f"🔥 کاربران فعال ۷ روز: {dashboard.users_active_week}\n"
        f"🔗 استفاده موفق از توکن‌ها: {dashboard.link_requests}\n"
        f"📨 ویدیوهای ارسال‌شده به کاربران: {dashboard.deliveries}\n"
        f"🗑 پیام‌های حذف‌شده: {dashboard.deleted_messages}\n"
        f"🔍 بررسی‌های عضویت: {dashboard.membership_checks}\n"
        f"⏳ توکن‌های منقضی: {dashboard.expired_tokens}\n"
        f"⚠️ مقصدهای خطادار: {dashboard.destination_failures}\n"
        f"🔒 کانال‌های الزامی فعال: {dashboard.required_channels}\n"
        f"📅 کارهای در انتظار: {dashboard.pending_jobs}\n\n"
        "بازه‌های زمانی (بر اساس رکوردهای محلی):\n"
        f"• ۲۴ ساعت: تحویل {periods['today']['deliveries']} | "
        f"بررسی عضویت {periods['today']['membership_checks']} | "
        f"کاربر جدید {periods['today']['new_users']}\n"
        f"• ۷ روز: تحویل {periods['week']['deliveries']} | "
        f"بررسی {periods['week']['membership_checks']} | "
        f"کاربر جدید {periods['week']['new_users']}\n"
        f"• ۳۰ روز: تحویل {periods['month']['deliveries']} | "
        f"بررسی {periods['month']['membership_checks']} | "
        f"کاربر جدید {periods['month']['new_users']}"
    )
    if dashboard.popular:
        text += "\n\nمحبوب‌ترین پست‌ها بر اساس استفاده موفق از توکن:\n"
        for post_id, title, uses, deliveries in dashboard.popular:
            text += f"• #{post_id} {title or 'بدون عنوان'}: {uses} استفاده، {deliveries} تحویل\n"
    await show(event, text, back_menu())


@router.callback_query(F.data == "menu:stats")
async def stats_home(callback: CallbackQuery, ctx: AppContext) -> None:
    await render_dashboard(callback, ctx)
    await callback.answer()


async def render_errors(event: Message | CallbackQuery, ctx: AppContext) -> None:
    failures = await ctx.repos.operations.recent_failures(20)
    if not failures:
        text = "🧾 گزارش خطاها\n\nهیچ خطای ثبت‌شده‌ای در عملیات اخیر وجود ندارد."
    else:
        lines = ["🧾 گزارش خطاهای عملیات اخیر (حداکثر ۲۰ مورد):"]
        for item in failures:
            lines.append(
                f"• #{item.id} | {item.operation} | {item.status.value} | "
                f"{format_local(item.created_at, ctx.settings.tzinfo)}\n"
                f"  موجودیت: {item.entity_type or '—'}/{item.entity_id or '—'}\n"
                f"  خطا: {(item.error_message or '—')[:300]}"
            )
        text = "\n".join(lines)
    await show(event, text, errors_menu())


@router.callback_query(F.data == "menu:errors")
async def errors_home(callback: CallbackQuery, ctx: AppContext) -> None:
    await render_errors(callback, ctx)
    await callback.answer()


@router.callback_query(F.data == "errors:refresh")
async def errors_refresh(callback: CallbackQuery, ctx: AppContext) -> None:
    await render_errors(callback, ctx)
    await callback.answer("به‌روزرسانی شد.")
