from __future__ import annotations

import json
import logging
from typing import Any

logger = logging.getLogger("dscons.deepseek.history")


class DeepSeekHistoryMixin:
    """Mission history, sample missions and logging mixin."""

    def get_sample_missions(self) -> list[dict[str, Any]]:
        """Danh mục 4 kịch bản nhiệm vụ thực tế của DSCons."""
        return [
            {
                "sample_id": "mission-ipc-cong-ben-kem",
                "title": "Thẩm Định & Lập Hồ Sơ Nghiệm Thu Thanh Toán IPC Đợt 2 (Cống Bến Kem)",
                "pillar": "xay_lap",
                "pillar_title": "Trụ Cột 1: Thi công Xây lắp & Thủy lợi",
                "description": "Phối hợp 6 nhân sự AI thẩm định khối lượng hiện trường, chứng chỉ nén mẫu bê tông R28, bóc tách BOQ 03a, rà soát FIDIC và khấu trừ tạm ứng 10%, retention 5%.",
                "target_partner": "Chủ đầu tư Ban QLDA Nông nghiệp Hải Phòng",
                "suggested_prompt": "Kiểm toán toàn diện khối lượng đắp đê bao, ép cọc cừ Larsen và bê tông cống Đợt 2 Dự án Cống Bến Kem & Chiếu sáng Kiến Minh. Lập bảng phụ lục 03a nghiệm thu thanh toán theo Luật Xây dựng 2025.",
                "involved_personas": ["phuc", "hung", "quynh", "thao", "nam", "tung"],
            },
            {
                "sample_id": "mission-transport-thoat-nuoc-hp",
                "title": "Kiểm Toán Vận Tải Xe Ben & Bùn Nạo Vét (Thoát Nước Hải Phòng)",
                "pillar": "van_tai_xe_ben",
                "pillar_title": "Trụ Cột 2: Logistics Cơ Giới & Vận Tải Xe Ben",
                "description": "Đối soát 36 chuyến xe Howo 4 chân, kiểm tra vé cân bùn nạo vét Kênh Đông Đình Vũ, giám sát định mức tiêu hao dầu 24L/h và xuất hồ sơ cước vận tải.",
                "target_partner": "Công ty TNHH MTV Thoát Nước Hải Phòng (MST: 0200149705)",
                "suggested_prompt": "Thực hiện đối soát toàn bộ 36 chuyến xe ben vận chuyển bùn bù nạo vét tuyến Kênh Đông đến bãi thải Đình Vũ. Kiểm tra tiêu hao dầu định mức và đối chiếu vé cân xuất hóa đơn.",
                "involved_personas": ["phuc", "nam", "thao", "tung"],
            },
            {
                "sample_id": "mission-machinery-loan-khai",
                "title": "Đối Soát Cho Thuê Ca Máy Đào Kobelco & Tính OEE (Loan Khải)",
                "pillar": "cho_thue_ca_may",
                "pillar_title": "Trụ Cột 3: Cho Thuê Máy Móc & Ca Máy Cơ Giới",
                "description": "Đối soát bảng chấm công thợ lái 28 ca máy đào Kobelco SK200, kiểm tra nhật trình GPS, tính chỉ số hiệu suất OEE đạt 87.4% và lập biên bản đối chiếu công nợ.",
                "target_partner": "Công ty TNHH Xây Dựng Loan Khải (MST: 0201889988)",
                "suggested_prompt": "Kiểm toán hợp đồng cho thuê máy đào bánh xích Kobelco SK200 tại công trường Thủy Nguyên. Đối soát ca máy thực tế, khấu trừ tạm ứng và tính toán chỉ số OEE.",
                "involved_personas": ["phuc", "nam", "thao"],
            },
            {
                "sample_id": "mission-materials-trung-kien",
                "title": "Kiểm Toán Cát San Lấp, Hao Hụt Định Mức & Mẫu R28 (Trung Kiên)",
                "pillar": "vat_tu_san_lap",
                "pillar_title": "Trụ Cột 4: Mua Bán Vật Tư & San Lấp",
                "description": "Kiểm toán tỷ lệ hao hụt cát đắp 2.8% theo ĐM 12/2021/BXD, rà soát điều kiện nghiệm thu chứng chỉ CO/CQ, kết quả nén mẫu bê tông R28 và đối soát 3 bên 3-Way Matching.",
                "target_partner": "Công ty CP Đầu tư Trung Kiên (MST: 0201805660)",
                "suggested_prompt": "Kiểm toán toàn diện 1,250 m3 cát san lấp cung cấp cho Dự án Đa Độ. Đối soát hóa đơn VAT với phiếu nhập kho, kiểm tra tỷ lệ hao hụt và hồ sơ nén mẫu.",
                "involved_personas": ["hung", "quynh", "nam", "thao"],
            },
            {
                "sample_id": "mission-internal-management",
                "title": "Quản Trị Nội Bộ (Rà soát hóa đơn, Kiểm kê kho)",
                "pillar": "quan_tri_noi_bo",
                "pillar_title": "Nhiệm vụ: Quản trị Nội bộ",
                "description": "Rà soát, phân loại hoá đơn, kiểm kê vật tư trong kho, đối chiếu 3 chiều (3-Way Matching).",
                "target_partner": "Nội bộ Công ty",
                "suggested_prompt": "Kiểm kê vật tư trong kho tháng này, đối chiếu số liệu tồn kho với dữ liệu xuất nhập trên ERP. Phân loại các hóa đơn VAT và thực hiện đối soát 3 chiều (3-way matching) với phiếu nhập kho và biên bản bàn giao.",
                "involved_personas": ["thao", "nam", "minh"],
            },
        ]

    def _persist_mission_log(
        self,
        mission_id: str,
        mission_title: str,
        pillar: str,
        steps_count: int,
        duration: float,
        report: str,
    ) -> None:
        """Ghi nhận lịch sử nhiệm vụ vào bảng audit PostgreSQL."""
        sql = """
            INSERT INTO erp_agent_work_logs (
                employee_id, action_type, description, status, metadata, created_at
            ) VALUES (
                (SELECT id FROM employees LIMIT 1),
                'DHS_MISSION_EXECUTION',
                %s,
                'COMPLETED',
                %s::jsonb,
                NOW()
            );
        """
        payload_meta = json.dumps(
            {
                "mission_id": mission_id,
                "mission_title": mission_title,
                "pillar": pillar,
                "steps_count": steps_count,
                "duration_seconds": duration,
            }
        )
        try:
            with self.postgres_client.get_connection() as conn:
                with conn.cursor() as cur:
                    cur.execute(
                        sql, (f"Hoàn thành nhiệm vụ DHS: {mission_title}", payload_meta)
                    )
                    conn.commit()
        except Exception as exc:
            logger.debug("Lỗi ghi nhận mission log vào PostgreSQL: %s", exc)

    def get_mission_history(self, limit: int = 10) -> list[dict[str, Any]]:
        """Truy xuất lịch sử các nhiệm vụ đã thực thi."""
        sql = """
            SELECT id, action_type, description, status, metadata, created_at
            FROM erp_agent_work_logs
            WHERE action_type = 'DHS_MISSION_EXECUTION'
            ORDER BY created_at DESC
            LIMIT %s;
        """
        try:
            with self.postgres_client.get_connection() as conn:
                with conn.cursor() as cur:
                    cur.execute(sql, (limit,))
                    rows = cur.fetchall()
                    return [
                        {
                            "id": str(r["id"]),
                            "action_type": r["action_type"],
                            "description": r["description"],
                            "status": r["status"],
                            "metadata": r["metadata"]
                            if isinstance(r["metadata"], dict)
                            else json.loads(r["metadata"] or "{}"),
                            "created_at": r["created_at"].isoformat()
                            if r.get("created_at")
                            else None,
                        }
                        for r in rows
                    ]
        except Exception as exc:
            logger.debug("Lỗi đọc lịch sử mission từ PostgreSQL: %s", exc)
            return []
