"""Administrator diagnostics page (no secrets are rendered)."""

from __future__ import annotations

import logging
import platform
import shutil
from datetime import UTC, datetime

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

from app.context import AppContext
from app.handlers.common import safe_edit
from app.keyboards.callbacks import AdminCB
from app.keyboards.menus import admin_keyboard
from app.utils.formatting import esc

router = Router(name="admin")
logger = logging.getLogger(__name__)


def _uptime(ctx: AppContext) -> str:
    seconds = max(0, int((datetime.now(UTC) - ctx.started_at).total_seconds()))
    hours, remainder = divmod(seconds, 3600)
    minutes, secs = divmod(remainder, 60)
    return f"{hours:02d}:{minutes:02d}:{secs:02d}"


async def _admin_text(ctx: AppContext) -> str:
    counts = await ctx.repo.job_status_counts()
    uploaded = await ctx.repo.total_uploaded_videos()
    active = len(await ctx.repo.get_active_jobs())
    try:
        free = shutil.disk_usage(ctx.settings.database_path.parent).free / (1024**3)
        disk_text = f"{free:.1f} GB آزاد"
    except OSError:
        disk_text = "قابل بررسی نیست"

    lines = [
        "<b>🩺 عیب‌یابی و وضعیت سامانه</b>",
        "",
        f"مدت اجرا: <code>{_uptime(ctx)}</code>",
        f"پایتون: <code>{esc(platform.python_version())}</code>",
        f"سیستم: <code>{esc(platform.system())}</code>",
        f"عملیات فعال: <b>{active}</b>",
        f"کل عملیات ثبت‌شده: <b>{sum(counts.values())}</b>",
        f"ویدئوهای ارسال‌شده: <b>{uploaded}</b>",
        "",
        "<b>مسیرها</b>",
        f"دیتابیس: <code>{esc(ctx.settings.database_path)}</code>",
        f"فضای دیسک: {esc(disk_text)}",
        "",
        "<b>قابلیت‌ها</b>",
        "ذخیره‌سازی رسانه: <b>غیرفعال (ارسال مستقیم)</b>",
        f"Playwright fallback: <b>{'فعال' if ctx.settings.browser_fallback_enabled else 'غیرفعال'}</b>",
        f"FFmpeg/ffprobe: <b>{'فعال' if ctx.processor.available else 'غیرفعال'}</b>",
        "",
        "توکن ربات و مقادیر حساس هرگز در این صفحه نمایش داده نمی‌شوند.",
    ]
    return "\n".join(lines)


@router.message(Command("admin"))
async def admin_command(message: Message, ctx: AppContext) -> None:
    await message.answer(
        await _admin_text(ctx),
        parse_mode="HTML",
        disable_web_page_preview=True,
        reply_markup=admin_keyboard(),
    )


@router.callback_query(AdminCB.filter(F.action == "refresh"))
async def admin_refresh_callback(
    callback: CallbackQuery, callback_data: AdminCB, ctx: AppContext
) -> None:
    await callback.answer()
    await safe_edit(callback, await _admin_text(ctx), admin_keyboard())
