import app.database.controller as dbc
from app.apis import admin_required, item_response, list_response
from app.core import http_codes as codes
from app.core.dto import CodeDTO
from app.core.parsers import code_parser
from app.database.models import Code, Competition
from flask_jwt_extended import jwt_required
from flask_restx import Resource

api = CodeDTO.api
schema = CodeDTO.schema
list_schema = CodeDTO.list_schema


@api.route("/")
@api.param("CID")
class CodesList(Resource):
    @jwt_required
    def get(self, CID):
        items = dbc.get.code_list(CID)
        return list_response(list_schema.dump(items), len(items)), codes.OK


@api.route("/<code_id>")
@api.param("CID, code_id")
class CodesById(Resource):
    @jwt_required
    def put(self, CID, code_id):
        item = dbc.get.one(Code, code_id)
        item.code = dbc.utils.generate_unique_code()
        dbc.utils.commit_and_refresh(item)
        return item_response(schema.dump(item)), codes.OK