from __future__ import annotations

from telegram import Update
from telegram.ext import ContextTypes

from ..formatters import case_list


async def show_case(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    if not context.args:
        await update.message.reply_text("İstifadə: /is <id>")
        return

    result = context.bot_data["api"].get("bir_is", {"id": context.args[0]})
    if not result.get("success") or not result.get("data"):
        await update.message.reply_text("İş tapılmadı.")
        return

    await update.message.reply_text(case_list([result["data"]]), parse_mode="HTML")


async def list_cases(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    result = context.bot_data["api"].get("hamisi")
    if not result.get("success"):
        await update.message.reply_text(result.get("error", "Sorğu alınmadı."))
        return

    text = case_list(result.get("data", []))
    for chunk in _chunks(text):
        await update.message.reply_text(chunk, parse_mode="HTML")


async def status_case(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    if len(context.args) < 2:
        await update.message.reply_text("İstifadə: /status <id> <status>")
        return

    case_id = context.args[0]
    status = " ".join(context.args[1:])
    result = context.bot_data["api"].post("status_yenile", {"id": case_id, "is_statusu": status})
    await update.message.reply_text("Status yeniləndi." if result.get("success") else result.get("error", "Xəta"))


async def case_alias(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    case_id = update.message.text.replace("/case", "", 1).strip()
    result = context.bot_data["api"].get("bir_is", {"id": case_id})
    if not result.get("success") or not result.get("data"):
        await update.message.reply_text("İş tapılmadı.")
        return
    await update.message.reply_text(case_list([result["data"]]), parse_mode="HTML")


def _chunks(text: str, size: int = 3500) -> list[str]:
    if len(text) <= size:
        return [text]
    parts: list[str] = []
    current = ""
    for block in text.split("\n\n"):
        if len(current) + len(block) + 2 > size:
            parts.append(current)
            current = block
        else:
            current = f"{current}\n\n{block}".strip()
    if current:
        parts.append(current)
    return parts
