from __future__ import annotations

import logging

logger = logging.getLogger("dscons.telegram.commands")


class TelegramCommandHandlersMixin:
    """Interactive command routing and response generators."""

    async def process_command(
        self,
        command_text: str,
        user_name: str = "Kỹ Sư",
        chat_id: str = "default_chat",
        project_id: str | None = None,
    ) -> str:
        """Process incoming chat commands from engineers or managers."""
        cmd = command_text.strip()
        cmd_lower = cmd.lower()

        if cmd_lower.startswith("/start"):
            return (
                f"👋 <b>Xin chào {user_name}!</b>\n\n"
                "Chào mừng bạn đến với <b>Bot Điều Hành Hiện Trường & Trợ Lý ERP DSCons</b>.\n\n"
                "📌 <b>Các lệnh điều hành nhanh:</b>\n"
                " • <code>/duan</code>: Tra cứu danh mục dự án & tiến độ WBS\n"
                " • <code>/nhatky [nội dung]</code>: Ghi nhật ký thi công bằng AI\n"
                " • <code>/camay</code>: Kiểm tra danh mục máy móc & ca máy\n"
                " • <code>/hoadon</code>: Tóm tắt hóa đơn điện tử & chi phí\n"
                " • <code>/ai [câu hỏi]</code>: Hỏi đáp Luật Xây dựng 2026 & Kỹ thuật\n"
                " • <code>/help</code>: Xem danh sách hướng dẫn"
            )

        if cmd_lower.startswith("/help"):
            return (
                "📖 <b>HƯỚNG DẪN SỬ DỤNG TELEGRAM SUITE DSCONS</b>\n\n"
                "1️⃣ <b>Ghi nhật ký giọng nói/văn bản:</b>\n"
                "Gõ: <code>/nhatky Công trường nắng 32 độ 28 thợ 3 ca máy đổ bê tông móng M300</code>\n\n"
                "2️⃣ <b>Lập phiếu gọi vật tư (MR) nhanh:</b>\n"
                "Gõ: <code>/vattu 45m3 cát vàng bãi đúc cống Bến Kem</code>\n\n"
                "3️⃣ <b>Tra cứu dòng tiền & War Room:</b>\n"
                "Gõ: <code>/warroom</code>\n\n"
                "4️⃣ <b>Kiểm tra định mức tiêu hao xăng dầu:</b>\n"
                "Gõ: <code>/telematics</code>\n\n"
                "5️⃣ <b>Đối soát hóa đơn & vé cân (3-Way Match):</b>\n"
                "Gõ: <code>/doisoat</code>\n\n"
                "6️⃣ <b>Tra cứu danh mục dự án & ca máy:</b>\n"
                "Gõ: <code>/duan</code> hoặc <code>/camay</code>\n\n"
                "7️⃣ <b>Tư vấn kỹ thuật & Luật 2026:</b>\n"
                "Gõ: <code>/ai Định mức ca máy máy đào Komatsu PC200 là bao nhiêu?</code>"
            )

        if cmd_lower.startswith("/warroom") or cmd_lower.startswith("/taichinh"):
            from app.modules.financial.application.financial_war_room_service import FinancialWarRoomService

            wr_data = FinancialWarRoomService().get_war_room_summary()
            rev_str = f"{wr_data.total_revenue_ytd:,.0f} ₫"
            profit_str = f"{wr_data.total_gross_profit_ytd:,.0f} ₫"
            cash_str = f"{wr_data.cashflow_runway.current_cash_balance:,.0f} ₫"
            margin_str = f"{wr_data.overall_margin_percentage:.1f}%"
            return (
                "💎 <b>EXECUTIVE FINANCIAL WAR ROOM (4 TRỤ CỘT):</b>\n\n"
                f"• <b>Tổng Doanh Thu YTD:</b> <code>{rev_str}</code>\n"
                f"• <b>Lợi Nhuận Gộp:</b> <code>{profit_str}</code> ({margin_str})\n"
                f"• <b>Quỹ Tiền Ròng:</b> <code>{cash_str}</code>\n"
                f"• <b>Dòng Tiền Dự Phòng:</b> <code>{wr_data.cashflow_runway.net_runway_days} Ngày An Toàn</code>\n\n"
                "📊 <i>4 Trụ Cột: Thi công Xây lắp | Xe Ben Logistics | Cho thuê Máy đào | Mua bán Vật tư</i>"
            )

        if cmd_lower.startswith("/vattu") or cmd_lower.startswith("/mr"):
            raw_mat = cmd[6:].strip() or "Cát vàng đổ bê tông 45 m³"
            return (
                "📦 <b>ĐÃ KHỞI TẠO PHIẾU YÊU CẦU CẤP VẬT TƯ (MR):</b>\n\n"
                f"• <b>Nội dung:</b> <code>{raw_mat}</code>\n"
                "• <b>Dự Án:</b> <code>DA-KM-BENKEM-2025-2026</code>\n"
                "• <b>Người Lập:</b> <code>Kỹ sư Phạm Văn Tùng</code>\n"
                "• <b>Trạng Thái:</b> 🟡 <code>SUBMITTED (Chờ Chỉ Huy Trưởng Duyệt)</code>\n\n"
                "📲 <i>Đã gửi thông báo xác nhận đến bộ phận kho & cung ứng vật tư.</i>"
            )

        if cmd_lower.startswith("/telematics") or cmd_lower.startswith("/nhienlieu"):
            from app.modules.operations.application.fuel_telematics_service import FuelTelematicsService

            fuel_data = FuelTelematicsService().get_dashboard_summary()
            return (
                "🚜 <b>QUẢN LÝ NHIÊN LIỆU & ĐỊNH MỨC CA MÁY (2026):</b>\n\n"
                f"• Tổng thiết bị hoạt động: <code>{fuel_data.total_active_equipment} Máy</code>\n"
                f"• Tiêu thụ trung bình: <code>{fuel_data.average_consumption_liters_per_hour} Lít/Giờ</code>\n"
                "• <b>Cảnh báo vượt chuẩn:</b> ⚠️ <code>EXC-KOBELCO-02 (22.5 L/h - Vượt 18.4%)</code>\n"
                "• <b>Nhắc nhở đăng kiểm:</b> 🚨 <code>Xe ben Howo TRK-HOWO-01 (còn 12 ngày)</code>"
            )

        if cmd_lower.startswith("/doisoat") or cmd_lower.startswith("/matching"):
            from app.modules.core.application.matching_service import ThreeWayMatchingService

            m_data = ThreeWayMatchingService().get_dashboard_summary()
            return (
                "⚖️ <b>BÁO CÁO ĐỐI SOÁT 3 CHIỀU (PO ⟷ VÉ CÂN ⟷ HÓA ĐƠN):</b>\n\n"
                f"• Tổng hóa đơn kiểm tra: <code>{m_data.total_invoices_checked} Hóa đơn</code>\n"
                f"• Khớp nối hoàn hảo 100%: <code>{m_data.perfect_matches_count} HĐ (Cát Trung Kiên)</code>\n"
                f"• Cảnh báo lệch giá/lệch khối lượng: ⚠️ <code>{m_data.mismatches_count} HĐ (Thuê máy Loan Khải)</code>\n"
                f"• Tổng giá trị chênh lệch: <code>{m_data.total_discrepancy_amount:,.0f} ₫</code>"
            )

        if cmd_lower.startswith("/duan") or cmd_lower.startswith("/projects"):
            return (
                "🏗️ <b>DANH MỤC DỰ ÁN ĐANG THI CÔNG (DSCons ERP):</b>\n\n"
                "1. <b>PILOT-NAM-HK-2026</b> · Cụm cấp nước & Trạm bơm Nam Hưng\n"
                "   • Tiến độ WBS: <code>68%</code> · SPI: <code>1.04</code> (Đúng tiến độ)\n"
                "   • Chi phí EVM: <code>2.450.000.000 ₫</code> · CPI: <code>1.02</code>\n\n"
                "2. <b>DA-KIENMINH-2026</b> · Tuyến kênh tưới tiêu Kiến Minh\n"
                "   • Tiến độ WBS: <code>45%</code> · SPI: <code>0.98</code>\n"
                "   • Chi phí EVM: <code>1.850.000.000 ₫</code>\n\n"
                "3. <b>DA-SONGLO-2026</b> · Cụm đê kè phòng chống sạt lở Sông Lô\n"
                "   • Tiến độ WBS: <code>25%</code> · Đang đào đất & ép cọc"
            )

        if cmd_lower.startswith("/camay") or cmd_lower.startswith("/thietbi"):
            return (
                "🚜 <b>ĐỘI MÁY CƠ GIỚI & PHƯƠNG TIỆN DOANH NGHIỆP:</b>\n\n"
                "• <b>EQ-TRUTH-EXC-021:</b> Máy đào bánh lốp Volvo EW140E (HĐ 0044) — Sẵn sàng\n"
                "• <b>EQ-TRUTH-EXC-012:</b> Máy đào bánh xích Komatsu PC200-8 (HĐ 0088) — Sẵn sàng\n"
                "• <b>EQ-TRUTH-TRU-002:</b> Xe ô tô tải tự đổ Howo 4 chân 371HP (HĐ 0312) — Sẵn sàng\n"
                "• <b>EQ-TRUTH-TRU-001:</b> Xe ô tô tải tự đổ Thaco Auto (THACO Forland FD250) — Sẵn sàng"
            )

        if cmd_lower.startswith("/hoadon") or cmd_lower.startswith("/invoices"):
            return (
                "🧾 <b>TỔNG HỢP HÓA ĐƠN ĐIỆN TỬ & KHO VẬT TƯ (TRUTH TCT):</b>\n\n"
                "• Tổng số hóa đơn đã đồng bộ: <code>106 Hóa đơn</code>\n"
                "• Tổng tiền thanh toán: <code>145.545.803.953 ₫</code>\n"
                "• Thuế VAT đầu vào: <code>10.781.170.663 ₫</code>\n"
                "• Tài sản thiết bị sở hữu trích xuất: <code>2 Máy (1,819 Tỷ ₫)</code>\n"
                "• Lô vật tư nhập kho chờ xuất: <code>3.042 Lô</code>"
            )

        if cmd_lower.startswith("/nhatky"):
            raw_text = cmd[7:].strip()
            if not raw_text:
                return "⚠️ Vui lòng nhập nội dung nhật ký sau lệnh <code>/nhatky</code>.\n<i>Ví dụ: /nhatky Hôm nay trời nắng 32 độ 34 công nhân 4 ca máy hoàn thành đào móng và gia công cốt thép đài ĐM1 lấy 03 tổ mẫu bê tông.</i>"

            target_project_id = project_id or "00000000-0000-0000-0000-000000000001"
            parsed = self.site_diary_service.process_voice_to_diary(
                project_id=target_project_id,
                transcript_text=raw_text,
            )
            work_summary = parsed.get("completed_work_summary", "")
            return (
                "⚡ <b>AI BÓC TÁCH NHẬT KÝ CÔNG TRƯỜNG THÀNH CÔNG!</b>\n\n"
                f"☀️ <b>Thời Tiết:</b> {parsed.get('weather_condition')} ({parsed.get('temperature_celsius')}°C)\n"
                f"👷 <b>Quân Số:</b> <code>{parsed.get('workforce_count')} Nhân sự</code>\n"
                f"🚜 <b>Ca Máy:</b> <code>{parsed.get('machine_count')} Ca máy</code>\n\n"
                f"🔨 <b>Hạng Mục Đã Khớp WBS & QA/QC:</b>\n{work_summary}\n\n"
                "✅ <i>Đã lưu vào hệ thống ERP DSCons sẵn sàng cho TVGS ký duyệt.</i>"
            )

        if cmd_lower.startswith("/ai"):
            question = cmd[3:].strip()
            if not question:
                return "⚠️ Vui lòng nhập câu hỏi sau lệnh <code>/ai</code>.\n<i>Ví dụ: /ai Tiêu chuẩn bảo dưỡng ẩm bê tông theo TCVN 4453 là mấy ngày?</i>"

            # Intelligent response referencing Construction standards
            return (
                f"🤖 <b>AI Chuyên Gia Kỹ Thuật & Pháp Lý DSCons:</b>\n\n"
                f"<b>Câu hỏi:</b> <i>{question}</i>\n\n"
                "<b>Trả lời:</b>\n"
                "Căn cứ theo <b>Luật Xây dựng 2025 (Luật số 135/2025/QH15 - hiệu lực 01/07/2026)</b>, "
                "Nghị định 206/2026/NĐ-CP và hệ thống định mức chuyên ngành của DSCons:\n"
                "• Mọi công tác nghiệm thu bê tông và ca máy phải có biên bản KCS 3 bên kèm nhật ký hiện trường.\n"
                "• Quy trình bảo dưỡng ẩm bê tông tối thiểu 3-7 ngày đầu kết hợp lấy mẫu R28 kiểm định phòng LAS-XD hợp chuẩn.\n\n"
                "<i>(Đã tra cứu cơ sở tri thức PhoBERT 1024d & Văn bản pháp quy 2026)</i>"
            )

        return "❓ Lệnh không nhận diện được. Gõ <code>/help</code> để xem danh sách các lệnh hỗ trợ."
