"""A Master column's `alias` (display name): stored and returned with the
field schema, blank normalised away, and printed as the header row of an
ad-hoc Excel export while row values are still read by the raw field name."""

import io

from openpyxl import load_workbook


async def _make_master(client, headers):
    resp = await client.post(
        "/masters",
        headers=headers,
        json={
            "name": "Alias Test Master",
            "field_schema": [
                {"name": "dist_nm", "alias": "  District Name  ", "type": "varchar"},
                {"name": "code", "alias": "   ", "type": "varchar"},
                {"name": "plain", "type": "varchar"},
            ],
        },
    )
    assert resp.status_code == 201, resp.text
    return resp.json()


async def test_alias_round_trips_and_blank_is_dropped(client, auth_headers):
    master = await _make_master(client, auth_headers)
    fields = {f["name"]: f for f in master["field_schema"]}
    assert fields["dist_nm"]["alias"] == "District Name"
    assert fields["code"]["alias"] is None
    assert fields["plain"]["alias"] is None


async def test_export_header_uses_alias_but_reads_values_by_name(client, auth_headers):
    master = await _make_master(client, auth_headers)
    rec = await client.post(
        f"/masters/{master['id']}/records",
        headers=auth_headers,
        json={"field_values": {"dist_nm": "Kollam", "code": "KLM", "plain": "x"}},
    )
    assert rec.status_code == 201, rec.text

    resp = await client.post(
        "/datasets/export.xlsx",
        headers=auth_headers,
        json={"source_type": "master", "source_id": master["id"], "columns": ["dist_nm", "code", "plain"], "filters": []},
    )
    assert resp.status_code == 200, resp.text
    ws = load_workbook(io.BytesIO(resp.content)).active
    rows = list(ws.iter_rows(values_only=True))
    assert rows[0] == ("District Name", "code", "plain")
    assert rows[1] == ("Kollam", "KLM", "x")


def test_master_ai_prompt_asks_for_a_display_name_per_field():
    from app.routers.ai_assistant import _MASTER_SCHEMA_INSTRUCTIONS

    assert '"alias"' in _MASTER_SCHEMA_INSTRUCTIONS
