import json
from time import time
from fastapi import APIRouter
from app.config import config
from app.utils.logger_util import logger
from app.utils.response_util import response
from app import mongo

router = APIRouter()


@router.get("/get-all", tags=[""])
async def template_get_all():
  start_time = time()

  attributes = await mongo.template_attributes_collection.find({}, {
    "_id": False
  }).sort("id", mongo.asc).to_list()

  return response({
    "attributes": attributes
  }, start_time=start_time)


@router.post("/create", tags=[""])
async def create(params: dict):
  start_time = time()
  data = params["attribute"]

  data["id"] = await mongo.get_next_id(mongo.template_attributes_collection)

  logger.json(data)

  try:
    await mongo.template_attributes_collection.insert_one(data)

    return response({
      "message": "Атрибут создан",
      "ok": True
    }, start_time=start_time)
  except Exception as e:
    return response({
      "message": str(e),
      "ok": False
    }, start_time=start_time, code=400)


@router.post("/update", tags=[""])
async def update(params: dict):
  start_time = time()
  data = params["data"]

  logger.json(data)

  try:
    await mongo.template_attributes_collection.update_one({
      "id": data["id"]
    }, {
      "$set": data
    })

    return response({
      "message": "Данные атрибута обновлены",
      "ok": True
    }, start_time=start_time)
  except Exception as e:
    return response({
      "message": str(e),
      "ok": False
    }, start_time=start_time, code=400)


@router.post("/delete", tags=[""])
async def delete(params: dict):
  start_time = time()
  attribute_id = params["attributeId"]

  logger.json(attribute_id)

  try:
    await mongo.template_attributes_collection.delete_one({
      "id": attribute_id
    })

    return response({
      "message": "Атрибут удален",
      "ok": True
    }, start_time=start_time)
  except Exception as e:
    return response({
      "message": str(e),
      "ok": False
    }, start_time=start_time, code=400)
