"""Every answer a push can give, on one customer — run it against the sandbox to see them.

  python3 master_data_answers.py                      created, unchanged, updated, stale, UNKNOWN_REFERENCE
  python3 master_data_answers.py CUST-0099 C0000123   also adopt a shop that started in Slflo
"""
import sys
import uuid

from slflo import ApiError, Slflo, report


def put(api, path, body):
    return api.put(path, body, key=f"demo:{uuid.uuid4().hex}")["data"]


# region answers
def answers(api):
    seen = {}
    body = {"name": {"en": "Nile Corner"}, "blocked": False, "source_version": "2026-10-05T10:40:00Z"}
    seen["first push"] = put(api, "/customers/CUST-2001", body)["result"]            # created
    seen["same body again"] = put(api, "/customers/CUST-2001", body)["result"]       # unchanged

    newer = {**body, "name": {"en": "Nile Corner Market"}, "source_version": "2026-10-05T11:00:00Z"}
    seen["newer version"] = put(api, "/customers/CUST-2001", newer)["result"]        # updated

    older = {**body, "name": {"en": "Old name"}, "source_version": "2026-10-05T09:00:00Z"}
    seen["older version"] = put(api, "/customers/CUST-2001", older)["result"]        # stale: nothing written

    try:
        put(api, "/price-lists/NOT-PUSHED-YET/prices", {"prices": [
            {"product_ref": "ITEM-1001", "unit_ref": "PCS", "price": 10, "valid_from": "2026-01-01"}]})
    except ApiError as refused:
        seen["price before its list"] = f"{refused.status} {refused.code}"           # 422 UNKNOWN_REFERENCE
    return seen
# endregion


# region adopt
def adopt(api, ref, salflo_id):
    """Link a shop that was created in Slflo (by a rep or the office) to your account number,
    instead of creating a second one."""
    return put(api, f"/customers/{ref}", {"name": {"en": "Adopted shop"}, "blocked": False, "salflo_id": salflo_id})
# endregion


def main(argv):
    api = Slflo()
    seen = answers(api)
    if len(argv) == 3:
        adopted = adopt(api, argv[1], argv[2])
        seen["adopted"] = f"{adopted['result']} {adopted['id']}"
    report(seen)
    return 0


if __name__ == "__main__":
    sys.exit(main(sys.argv))
