from time import time

from fastapi import APIRouter

from app import mongo
from app.utils.response_util import response

router = APIRouter()


@router.post("/add")
async def add_product(params: dict):
    start_time = time()

    deal_id = params["dealId"]
    product_data = {
        "productId": params["product"]["product"]["id"],
        "quantity": params["product"]["quantity"],
        "services": [
            {"serviceId": service["service"]["id"], "price": service["price"], "isFixedPrice": service.get("isFixedPrice", False), "quantity": 1}
            for service in params["product"]["services"]
        ]
    }

    deal = await mongo.deals_collection.find_one({"id": deal_id})
    if not deal:
        return response({"message": "Сделка не найдена", "ok": False}, start_time=start_time)

    products = deal.get("products", [])
    products.append(product_data)

    await mongo.deals_collection.update_one({"id": deal_id}, {"$set": {"products": products}})
    return response({
        "message": "Товар добавлен к сделке",
        "ok": True
    }, start_time=start_time)


@router.post("/delete")
async def delete_product(params: dict):
    start_time = time()

    deal_id = params["dealId"]
    product_id = params["productId"]

    deal = await mongo.deals_collection.find_one({"id": deal_id})
    if not deal:
        return response({"message": "Сделка не найдена", "ok": False}, start_time=start_time)

    products = deal.get("products", [])
    products = [product for product in products if product["productId"] != product_id]

    await mongo.deals_collection.update_one({"id": deal_id}, {"$set": {"products": products}})
    return response({
        "message": "Товар удалён из сделки",
        "ok": True
    }, start_time=start_time)
