"""Automated test suite for 4-Pillar Enterprise Legal Knowledge Base (Construction, Enterprise, Tax, Accounting)."""

from __future__ import annotations

from pathlib import Path
import pytest

KB_ROOT = Path("KNOWLEDGE_BASE/LAW")


def test_four_pillar_legal_documents_exist():
    """Kiểm tra sự hiện diện của đầy đủ các văn bản quy phạm pháp luật theo 4 trụ cột nghiệp vụ."""
    # 1. Trụ cột Doanh nghiệp
    luat_dn = KB_ROOT / "LUAT" / "Luat_59_2020_QH14_Luat_Doanh_Nghiep.md"
    nd_dn = KB_ROOT / "NGHI_DINH" / "Nghi_Dinh_01_2021_ND_CP_Dang_Ky_Doanh_Nghiep.md"
    assert luat_dn.exists(), f"Thiếu {luat_dn}"
    assert nd_dn.exists(), f"Thiếu {nd_dn}"

    # 2. Trụ cột Thuế
    luat_qlt = KB_ROOT / "LUAT" / "Luat_38_2019_QH14_Luat_Quan_Ly_Thue.md"
    luat_gtgt = KB_ROOT / "LUAT" / "Luat_13_2008_QH12_Luat_Thue_Gia_Tri_Gia_Tang.md"
    luat_tndn = KB_ROOT / "LUAT" / "Luat_14_2008_QH12_Luat_Thue_TNDN.md"
    nd_hd = KB_ROOT / "NGHI_DINH" / "Nghi_Dinh_123_2020_ND_CP_Hoa_Don_Chung_Tu_Dien_Tu.md"
    tt_hd = KB_ROOT / "THONG_TU" / "Thong_Tu_78_2021_TT_BTC_Huong_Dan_Hoa_Don_Dien_Tu.md"
    for f in [luat_qlt, luat_gtgt, luat_tndn, nd_hd, tt_hd]:
        assert f.exists(), f"Thiếu {f}"

    # 3. Trụ cột Kế toán
    luat_kt = KB_ROOT / "LUAT" / "Luat_88_2015_QH13_Luat_Ke_Toan.md"
    tt_200 = KB_ROOT / "THONG_TU" / "Thong_Tu_200_2014_TT_BTC_Ke_Toan_Xay_Lap.md"
    vas_15 = KB_ROOT / "THONG_TU" / "Chuan_Muc_Ke_Toan_VAS_15_Hop_Dong_Xay_Dung.md"
    for f in [luat_kt, tt_200, vas_15]:
        assert f.exists(), f"Thiếu {f}"

    # 4. Trụ cột Xây dựng
    luat_xd = KB_ROOT / "LUAT" / "Luat_135_2025_QH15_Luat_Xay_Dung_2026.md"
    tt_38 = KB_ROOT / "THONG_TU" / "Thong_Tu_38_2026_TT_BXD_Dinh_Muc_Du_Toan_Xay_Dung.md"
    assert luat_xd.exists(), f"Thiếu {luat_xd}"
    assert tt_38.exists(), f"Thiếu {tt_38}"


def test_enterprise_legal_document_contents_and_mst_grounding():
    """Kiểm tra nội dung tri thức được gắn chặt với MST Công ty Định Sơn (0202111150) và mô hình TNHH."""
    luat_dn_content = (KB_ROOT / "LUAT" / "Luat_59_2020_QH14_Luat_Doanh_Nghiep.md").read_text(encoding="utf-8")
    assert "0202111150" in luat_dn_content
    assert "Công ty TNHH" in luat_dn_content
    assert "Hội đồng thành viên" in luat_dn_content
    assert "Người đại diện theo pháp luật" in luat_dn_content

    nd_dn_content = (KB_ROOT / "NGHI_DINH" / "Nghi_Dinh_01_2021_ND_CP_Dang_Ky_Doanh_Nghiep.md").read_text(encoding="utf-8")
    assert "0202111150" in nd_dn_content
    assert "4290" in nd_dn_content


def test_tax_legal_rules_for_aec_matching():
    """Kiểm tra các quy chuẩn thuế xây dựng: Hóa đơn điện tử, thanh toán không dùng tiền mặt >= 20 triệu."""
    luat_gtgt = (KB_ROOT / "LUAT" / "Luat_13_2008_QH12_Luat_Thue_Gia_Tri_Gia_Tang.md").read_text(encoding="utf-8").lower()
    assert "20 triệu đồng" in luat_gtgt
    assert "khấu trừ" in luat_gtgt
    assert "chứng từ thanh toán không dùng tiền mặt" in luat_gtgt

    nd_hd = (KB_ROOT / "NGHI_DINH" / "Nghi_Dinh_123_2020_ND_CP_Hoa_Don_Chung_Tu_Dien_Tu.md").read_text(encoding="utf-8")
    assert "nghiệm thu, bàn giao" in nd_hd
    assert "Mẫu 04/SS-HĐĐT" in nd_hd


def test_accounting_rules_aec_cost_accounts():
    """Kiểm tra hệ thống tài khoản kế toán xây lắp: TK 621, 622, 623, 627, 154, 632 và Chuẩn mực VAS 15."""
    tt_200 = (KB_ROOT / "THONG_TU" / "Thong_Tu_200_2014_TT_BTC_Ke_Toan_Xay_Lap.md").read_text(encoding="utf-8").upper()
    assert "621" in tt_200
    assert "622" in tt_200
    assert "623" in tt_200
    assert "627" in tt_200
    assert "154" in tt_200
    assert "632" in tt_200

    vas_15 = (KB_ROOT / "THONG_TU" / "Chuan_Muc_Ke_Toan_VAS_15_Hop_Dong_Xay_Dung.md").read_text(encoding="utf-8").lower()
    assert "vas 15" in vas_15
    assert "hợp đồng xây dựng" in vas_15
    assert "tỷ lệ phần trăm" in vas_15

