"""Offline label-selection checks with qualified fictitious associations."""
from dataclasses import dataclass, replace


@dataclass(frozen=True)
class Snapshot:
    seller: str
    plan: str
    shipment: str
    confirmation: str | None
    revision: int
    all_pages: bool
    box_ids: tuple[str, ...]


@dataclass(frozen=True)
class Association:
    wms_container: str
    box_id: str
    revision: int
    physical_confirmed: bool


def resolve(snapshot, expected_scope, label_shipment, associations):
    if (snapshot.seller, snapshot.plan, snapshot.shipment) != expected_scope:
        return 'REVIEW_SCOPE', ()
    if not snapshot.confirmation:
        return 'WAIT_CONFIRMATION_ID', ()
    if label_shipment != snapshot.confirmation:
        return 'REVIEW_LABEL_SHIPMENT_ID', ()
    if not snapshot.all_pages:
        return 'WAIT_COMPLETE_BOX_LIST', ()
    if not associations:
        return 'REVIEW_EMPTY_SELECTION', ()
    if len(snapshot.box_ids) != len(set(snapshot.box_ids)):
        return 'REVIEW_BOX_LIST', ()
    wms_ids = [row.wms_container for row in associations]
    selected_ids = [row.box_id for row in associations]
    if len(wms_ids) != len(set(wms_ids)):
        return 'REVIEW_DUPLICATE_WMS_CONTAINER', ()
    if len(selected_ids) != len(set(selected_ids)):
        return 'REVIEW_DUPLICATE_BOX_ASSOCIATION', ()
    for row in associations:
        if row.revision != snapshot.revision:
            return 'REVIEW_STALE_ASSOCIATION', ()
        if row.box_id not in snapshot.box_ids:
            return 'REVIEW_UNKNOWN_BOX_ID', ()
        if not row.physical_confirmed:
            return 'REVIEW_PHYSICAL_ASSOCIATION', ()
    return 'SELECTION_READY_NOT_LABEL_PRINTED', tuple(selected_ids)


def main():
    # Short identifiers are intentionally fictitious, not native API payloads.
    snapshot = Snapshot('seller-A', 'plan-A', 'shipment-A', 'confirmed-A', 3, True, ('box-A', 'box-B'))
    scope = ('seller-A', 'plan-A', 'shipment-A')
    rows = (Association('WMS-1', 'box-A', 3, True), Association('WMS-2', 'box-B', 3, True))
    cases = [
        ('qualified associations', snapshot, 'confirmed-A', rows, 'SELECTION_READY_NOT_LABEL_PRINTED'),
        ('2024 shipment sent to v0', snapshot, 'shipment-A', rows, 'REVIEW_LABEL_SHIPMENT_ID'),
        ('confirmation not observed', replace(snapshot, confirmation=None), 'confirmed-A', rows, 'WAIT_CONFIRMATION_ID'),
        ('another page pending', replace(snapshot, all_pages=False), 'confirmed-A', rows, 'WAIT_COMPLETE_BOX_LIST'),
        ('packageId used as boxId', snapshot, 'confirmed-A', (replace(rows[0], box_id='package-A'),), 'REVIEW_UNKNOWN_BOX_ID'),
        ('same WMS carton twice', snapshot, 'confirmed-A', (rows[0], replace(rows[1], wms_container='WMS-1')), 'REVIEW_DUPLICATE_WMS_CONTAINER'),
        ('one Amazon box on two cartons', snapshot, 'confirmed-A', (rows[0], replace(rows[1], box_id='box-A')), 'REVIEW_DUPLICATE_BOX_ASSOCIATION'),
        ('old association revision', snapshot, 'confirmed-A', (replace(rows[0], revision=2),), 'REVIEW_STALE_ASSOCIATION'),
        ('physical match not confirmed', snapshot, 'confirmed-A', (replace(rows[0], physical_confirmed=False),), 'REVIEW_PHYSICAL_ASSOCIATION'),
    ]
    for name, source, shipment, links, expected in cases:
        decision, ids = resolve(source, scope, shipment, links)
        assert decision == expected, (name, decision)
        print(name + ': ' + decision)
    assert resolve(snapshot, scope, 'confirmed-A', rows)[1] == ('box-A', 'box-B')
    assert resolve(snapshot, scope, 'confirmed-A', rows[:1])[1] == ('box-A',)
    assert resolve(snapshot, ('seller-B', 'plan-A', 'shipment-A'), 'confirmed-A', rows)[0] == 'REVIEW_SCOPE'
    assert resolve(snapshot, scope, 'confirmed-A', ())[0] == 'REVIEW_EMPTY_SELECTION'
    assert resolve(replace(snapshot, box_ids=('box-A', 'box-A')), scope, 'confirmed-A', rows)[0] == 'REVIEW_BOX_LIST'
    assert rows == (Association('WMS-1', 'box-A', 3, True), Association('WMS-2', 'box-B', 3, True))
    assert len(cases) == 9
    print('9 fictitious cases and 16 assertions passed. No Amazon call, PDF retrieval or printing performed.')


if __name__ == '__main__':
    main()
