from fastapi.testclient import TestClient

from app.main import app
from app.modules.partners.application.partner_service import PartnerService

client = TestClient(app)


def test_partner_service_extract_and_sync():
    """Kiểm tra trích xuất và đồng bộ đối tác từ hóa đơn thực tế."""
    svc = PartnerService()
    res = svc.extract_and_sync_all_partners_from_invoices()
    assert res["status"] == "success"
    assert res["total_partners_synced"] > 0
    assert res["total_history_records_created"] > 0


def test_partner_service_query_and_history():
    """Kiểm tra query danh sách đối tác và dòng thời gian lịch sử thay đổi."""
    svc = PartnerService()
    data = svc.get_partners(role_filter="all", limit=50)
    assert data["total"] > 0
    assert len(data["items"]) > 0
    assert "kpis" in data
    assert data["kpis"]["total_customers"] > 0
    assert data["kpis"]["total_vendors"] > 0

    # Tìm Petrolimex hoặc Đa Độ để test lịch sử
    petrolimex = svc.get_partner_detail("0200120833")
    if petrolimex:
        assert len(petrolimex["history"]) >= 2
        # Bản ghi mới nhất có PETROLIMEX
        assert "PETROLIMEX" in petrolimex["company_name"].upper()


def test_partner_api_endpoints():
    """Kiểm tra REST API endpoints cho Partners & Customers."""
    # 1. List
    res = client.get("/v1/erp/partners?role=customer")
    assert res.status_code == 200
    json_data = res.json()
    assert "items" in json_data
    assert "kpis" in json_data

    # 2. Detail
    if json_data["items"]:
        first_id = json_data["items"][0]["id"]
        res_det = client.get(f"/v1/erp/partners/{first_id}")
        assert res_det.status_code == 200
        det_data = res_det.json()
        assert "history" in det_data
        assert "related_invoices" in det_data

    # 3. HTML Pages
    res_page_cust = client.get("/dashboard/customers")
    assert res_page_cust.status_code == 200
    assert "Quản Lý Khách Hàng" in res_page_cust.text

    res_page_part = client.get("/dashboard/partners")
    assert res_page_part.status_code == 200
    assert "Quản Lý Khách Hàng & Đối Tác" in res_page_part.text
