from __future__ import annotations

from django.core.management.base import BaseCommand, CommandError

from printing.services import send_printing_job_latest_state_wecom


class Command(BaseCommand):
    help = "发送指定 PrintingJob 的“最新状态”到企业微信机器人（markdown）"

    def add_arguments(self, parser):
        parser.add_argument("printing_job_id", type=int, help="PrintingJob.id")
        parser.add_argument("--key", type=str, default=None, help="可选：临时覆盖 settings.WECOM_WEBHOOK_KEY")
        parser.add_argument("--timeout", type=float, default=10.0, help="HTTP 超时（秒）")
        parser.add_argument(
            "--dry-run",
            action="store_true",
            help="仅输出将要发送的 markdown 内容，不实际调用企业微信 webhook（适用于无 https 出网环境）",
        )

    def handle(self, *args, **options):
        printing_job_id = int(options["printing_job_id"])
        key = options.get("key")
        timeout = float(options.get("timeout") or 10.0)
        dry_run = bool(options.get("dry_run"))

        try:
            result = send_printing_job_latest_state_wecom(
                printing_job_id=printing_job_id,
                sender_label="系统自动发送",
                key=key,
                timeout_seconds=timeout,
                dry_run=dry_run,
            )
        except Exception as exc:
            raise CommandError(str(exc)) from exc

        if dry_run:
            self.stdout.write(result["message"])
            return

        if not bool(result.get("ok")):
            raise CommandError(
                f"WeCom webhook 返回失败：errcode={result.get('errcode')}, errmsg={result.get('errmsg')}, raw={result.get('wecom')}"
            )

        self.stdout.write(self.style.SUCCESS(f"OK: {result.get('wecom')}"))

