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 get_all():
  start_time = time()

  templates = await mongo.templates_collection.find({}, {
    "_id": False
  }).sort("id", mongo.desc).to_list()

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


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

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

  logger.json(data)

  try:
    await mongo.templates_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(data: dict):
  start_time = time()

  logger.json(data)

  try:
    await mongo.templates_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()
  id = params["id"]

  logger.json(id)

  try:
    await mongo.templates_collection.delete_one({
      "id": 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)
