# Tests cho Module Đối Soát Sao Kê Ngân Hàng Công Ty Xây Dựng Định Sơn
from fastapi.testclient import TestClient
from app.main import app
from app.modules.auth.presentation.auth import get_current_user
from app.core.postgres.erp_client import ErpDatabaseClient

app.dependency_overrides[get_current_user] = lambda: {
    "id": "admin-id",
    "email": "director@dscons.vn",
    "role": "superadmin",
    "full_name": "Nguyễn Sĩ Sơn",
}

client = TestClient(app)

def test_bank_reconciliation_summary():
    """Kiểm tra tổng hợp đối soát 4 tài khoản ngân hàng thực tế."""
    erp_client = ErpDatabaseClient()
    summary = erp_client.get_bank_reconciliation_summary()
    assert "banks" in summary
    assert "categories" in summary
    assert len(summary["banks"]) >= 4

    bank_names = [b["bank_name"].upper() for b in summary["banks"]]
    assert "ACB" in bank_names
    assert "TECHCOMBANK" in bank_names
    assert "VIETCOMBANK" in bank_names
    assert "VPBANK" in bank_names

    # Kiểm tra các danh mục dòng tiền
    cat_names = [c["transaction_category"] for c in summary["categories"]]
    assert "REVENUE_COLLECTION" in cat_names
    assert "SUPPLIER_PAYMENT" in cat_names

def test_bank_api_endpoints():
    """Kiểm tra các API endpoint tra cứu sao kê ngân hàng."""
    resp = client.get("/v1/erp/finance/bank-summary")
    assert resp.status_code == 200
    data = resp.json()
    assert len(data["banks"]) >= 4

    # Tra cứu giao dịch ACB
    resp_acb = client.get("/v1/erp/finance/bank-transactions?bank_name=ACB&limit=10")
    assert resp_acb.status_code == 200
    txns = resp_acb.json()
    assert len(txns) > 0
    for t in txns:
        assert t["bank_name"] == "ACB"
        assert t["account_number"] == "13456888888"

    # Tra cứu giao dịch Techcombank
    resp_tcb = client.get("/v1/erp/finance/bank-transactions?bank_name=TECHCOMBANK&limit=10")
    assert resp_tcb.status_code == 200
    txns_tcb = resp_tcb.json()
    assert len(txns_tcb) > 0
