"""`BẢN CAM KẾT` → `ban_cam_ket` matches `bieu_mau_sang_kien_template.json` keys (fe0)."""

import copy
import json
from pathlib import Path

import pytest

from src.be01.official_to_data_blank import official_to_data_blank

_REPO_ROOT = Path(__file__).resolve().parents[2]
_TEMPLATE_PATH = _REPO_ROOT / "fe0" / "public" / "assets" / "bieu_mau_sang_kien_template.json"


def _minimal_official_with_bck() -> dict:
    if not _TEMPLATE_PATH.is_file():
        pytest.skip("fe0 template JSON not found at %s" % _TEMPLATE_PATH)
    raw = json.loads(_TEMPLATE_PATH.read_text(encoding="utf-8"))
    official = {"BẢN CAM KẾT": copy.deepcopy(raw["BẢN CAM KẾT"])}
    bck = official["BẢN CAM KẾT"]
    bck["Ngày ký"] = {"Ngày": "15", "Tháng": "4", "Năm": "2026"}
    i1 = bck["I. THÔNG TIN CHỦ THỂ CAM KẾT"]
    i1["Tác giả đăng ký sáng kiến"] = "Nguyễn Văn A"
    i1["CCCD/Hộ chiếu số"] = "079012345678"
    i1["Đơn vị"] = "Khoa X"
    i1["Tên Bài báo trong nước/quốc tế là sản phẩm của nhiệm vụ NCKH"] = "Bài báo thử nghiệm"
    i1["Năm xét công nhận sáng kiến"] = "2026"
    vt = i1["Vai trò đối với bài báo (☑ vào ô tương ứng)"]
    vt["Tác giả chính Bài báo trong nước/quốc tế là sản phẩm của nhiệm vụ NCKH"] = True
    vt["Đồng tác giả Bài báo trong nước/quốc tế là sản phẩm của nhiệm vụ NCKH"] = False
    ii = bck["II. CAM KẾT NỘI DUNG (☑ vào ô tương ứng)"]
    q = ii["1. Quyền sở hữu đối với bài báo trong nước/quốc tế"]
    k1 = (
        "Tôi là chủ sở hữu hợp pháp của bài báo hoặc được chủ sở hữu/đồng chủ sở hữu đồng ý cho sử dụng bài báo có tên nêu trên làm sản phẩm đăng ký xét công nhận sáng kiến – cải tiến kỹ thuật tại ĐHYD"
    )
    k2 = (
        "Trường hợp bài báo là sản phẩm của nhiệm vụ NCKH: chủ sở hữu bài báo (cơ quan) đồng ý cho tác giả/nhóm tác giả sử dụng bài báo có tên nêu trên để đăng ký xét công nhận sáng kiến – cải tiến kỹ thuật tại ĐHYD"
    )
    q[k1] = True
    q[k2] = False
    kd = "Tất cả đồng tác giả đã biết, đồng ý và ký xác nhận cho phép Tác giả đăng ký sáng kiến được sử dụng bài báo có tên nêu trên để đăng ký xét công nhận sáng kiến – cải tiến kỹ thuật tại ĐHYD"
    ii["2. Đồng thuận của đồng tác giả bài báo trong nước/quốc tế"][kd] = True
    ku = (
        "Cá nhân đăng ký xét công nhận sáng kiến – cải tiến kỹ thuật tại ĐHYD đối với bài báo trong nước/quốc tế cam kết bài báo không thuộc 'Tạp chí săn mồi'. Tôi xin chịu trách nhiệm kiểm tra, đối chiếu và cung cấp bằng chứng khi được yêu cầu"
    )
    ii["3. Cam kết bài báo trong nước/quốc tế uy tín"][ku] = True
    kt = (
        "Tôi cam kết rằng việc sử dụng bài báo đăng ký xét công nhận sáng kiến tại ĐHYD sẽ không gây tranh chấp về: quyền tác giả/quyền liên quan, quyền sở hữu công nghiệp, tiết lộ bí mật kinh doanh, vi phạm bảo mật dữ liệu của bất kỳ bên thứ ba nào. Tôi chịu trách nhiệm trước pháp luật về tính trung thực, hợp pháp của hồ sơ"
    )
    ii["4. Tuân thủ pháp luật sở hữu trí tuệ"][kt] = True
    bck["Người cam kết (Ký tên, ghi rõ họ tên)"] = "Nguyễn Văn A"
    return official


def test_ban_cam_ket_from_numbered_template_keys():
    out = official_to_data_blank(_minimal_official_with_bck())
    b = out["ban_cam_ket"]
    assert b["tac_gia_dang_ky"] == "Nguyễn Văn A"
    assert b["cccd"] == "079012345678"
    assert b["don_vi"] == "Khoa X"
    assert b["ten_bai_bao"] == "Bài báo thử nghiệm"
    assert b["nam_xet"] == "2026"
    assert b["ngay_ky"] == {"ngay": "15", "thang": "4", "nam": "2026"}
    assert b["vai_tro"]["tac_gia_chinh"] is True
    assert b["vai_tro"]["dong_tac_gia"] is False
    assert b["cam_ket"]["quyen_so_huu_1"] is True
    assert b["cam_ket"]["quyen_so_huu_2"] is False
    assert b["cam_ket"]["dong_thuan"] is True
    assert b["cam_ket"]["bai_bao_uy_tin"] is True
    assert b["cam_ket"]["tuan_thu_phap_luat"] is True
    assert b["nguoi_cam_ket"] == "Nguyễn Văn A"
