import app.core.http_codes as codes
import app.database.controller as dbc
from app.apis import admin_required, item_response, list_response
from app.core.dto import TeamDTO
from app.core.parsers import team_parser
from app.database.models import Competition, Team
from flask_jwt_extended import get_jwt_identity, jwt_required
from flask_restx import Namespace, Resource, reqparse

api = TeamDTO.api
schema = TeamDTO.schema
list_schema = TeamDTO.list_schema


@api.route("/")
@api.param("CID")
class TeamsList(Resource):
    @jwt_required
    def get(self, CID):
        items = dbc.get.team_list(CID)
        return list_response(list_schema.dump(items))

    @jwt_required
    def post(self, CID):
        args = team_parser.parse_args(strict=True)
        item_comp = dbc.get.one(Competition, CID)
        item_team = dbc.add.team(args["name"], item_comp)
        return item_response(schema.dump(item_team))


@api.route("/<TID>")
@api.param("CID,TID")
class Teams(Resource):
    @jwt_required
    def get(self, CID, TID):
        item = dbc.get.team(CID, TID)
        return item_response(schema.dump(item))

    @jwt_required
    def delete(self, CID, TID):
        item_team = dbc.get.team(CID, TID)

        dbc.delete.team(item_team)
        return {}, codes.NO_CONTENT

    @jwt_required
    def put(self, CID, TID):
        args = team_parser.parse_args(strict=True)
        name = args.get("name")

        item_team = dbc.get.team(CID, TID)

        item_team = dbc.edit.team(item_team, name=name, competition_id=CID)
        return item_response(schema.dump(item_team))