from datetime import date, timedelta

import pytest

from test_products_inventory import another_business, headers, product, workspace

pytest_plugins = ("test_workspace",)


def test_expiring_products_filters_dates_search_and_pagination(client,verified_user):
    data=workspace(client,verified_user,"Expiry");business=data["business"]["id"]
    today=date.today();soon=product(client,verified_user,business,"Soon",sku="SOON",barcode="B-SOON",expiry_date=today.isoformat()).json();expired=product(client,verified_user,business,"Old",expiry_date=(today-timedelta(days=1)).isoformat()).json();product(client,verified_user,business,"Later",expiry_date=(today+timedelta(days=31)).isoformat());product(client,verified_user,business,"No date")
    endpoint=f"/api/businesses/{business}/products/expiring"
    rows=client.get(endpoint,headers=headers(verified_user));assert rows.status_code==200 and [item["product_id"] for item in rows.json()]==[soon["id"]] and rows.json()[0]["days_until_expiry"]==0
    assert client.get(endpoint,params={"status_filter":"expired"},headers=headers(verified_user)).json()[0]["product_id"]==expired["id"]
    assert client.get(endpoint,params={"days":31,"search":"B-SOON"},headers=headers(verified_user)).json()[0]["product_id"]==soon["id"]
    assert len(client.get(endpoint,params={"status_filter":"all","days":31,"limit":1,"offset":1},headers=headers(verified_user)).json())==1


def test_expiring_products_isolation_and_read_only(client,verified_user):
    data=workspace(client,verified_user,"Expiry isolation");business=data["business"]["id"];created=product(client,verified_user,business,"Protected",expiry_date=(date.today()+timedelta(days=2)).isoformat()).json()
    other=another_business(client,verified_user,"Other expiry")["business"]["id"]
    assert client.get(f"/api/businesses/{other}/products/expiring",headers=headers(verified_user)).json()==[]
    before=client.get(f"/api/businesses/{business}/products/{created['id']}",headers=headers(verified_user)).json()["product"]
    assert client.get(f"/api/businesses/{business}/products/expiring",headers=headers(verified_user)).status_code==200
    after=client.get(f"/api/businesses/{business}/products/{created['id']}",headers=headers(verified_user)).json()["product"]
    assert before["expiry_date"]==after["expiry_date"] and before["id"]==after["id"]
