import pandas as pd

from engine.preview import preview_file
from helpers import csv_b64, xlsx_b64


def test_csv_preview():
    df = pd.DataFrame({"card_num": ["1111", "2222"], "total_amount": [500, 750]})
    result = preview_file(csv_b64(df), "csv")
    assert result["headers"] == ["card_num", "total_amount"]
    assert result["rows"] == [["1111", "500"], ["2222", "750"]]
    assert result["header_row"] == 0


def test_xlsx_preview_detects_header_below_junk():
    import io, base64
    raw_rows = [
        ["HDFC Bank — Merchant Settlement Report", None, None],
        [None, None, None],
        ["CARD NUMBER", "TERMINAL NUMBER", "DOMESTIC AMT"],
        ["411111XXXXXX1111", "T001", 500],
        ["522222XXXXXX2222", "T002", 750],
    ]
    df = pd.DataFrame(raw_rows)
    buf = io.BytesIO()
    df.to_excel(buf, index=False, header=False)
    b64 = base64.b64encode(buf.getvalue()).decode()

    result = preview_file(b64, "xlsx")
    assert result["header_row"] == 2
    assert result["headers"] == ["CARD NUMBER", "TERMINAL NUMBER", "DOMESTIC AMT"]
    assert len(result["rows"]) == 2
    assert result["rows"][0][1] == "T001"


def test_sample_rows_capped_at_five():
    df = pd.DataFrame({"a": list(range(20))})
    result = preview_file(csv_b64(df), "csv")
    assert result["row_count_sampled"] == 5
