import { Body, Controller, Delete, Get, HttpException, HttpStatus, Param, Post, Put, Query, Res, UploadedFiles, UseGuards, Headers, UseInterceptors } from '@nestjs/common';
import { ApiBearerAuth, ApiBody, ApiConsumes, ApiParam, ApiTags } from '@nestjs/swagger';
import { Response } from 'express';
import {  CreateTeamDto,CreateTeamMemberDto,UpdateTeamDto, UpdateTeamMemberDto } from './dto/team.dto';
import { TeamService } from './team.service';
import { FilesInterceptor } from '@nestjs/platform-express';
import { diskStorage } from 'multer';
const axios = require("axios").default;

@Controller('team')
@ApiTags('Team')
export class TeamController {
    constructor(private readonly teamService: TeamService) { }


    @Get('/')
    // @UseGuards(JwtAuthGuard)
    getTeams() {
        try {
            return this.teamService.getTeams();
        } catch (ex) {
            ex;
        }
       
    }

    @Get('/:id')
    // @UseGuards(JwtAuthGuard)
    async getTeamById(@Param('id')id: number,@Res() res?: Response) {
        try {
        var response = await this.teamService.getTeamById(id);
        if(response){
          return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Team detail with respect to id",data:response});
          }else{
          return res.status(HttpStatus.BAD_REQUEST).json({statusCode:res.statusCode,statusMessage:"Something went wrong",data:""});
          }
        } catch (ex) {
          ex;  
        }
        
    }
      
    @Post('/add')

    async add(@Body() data: CreateTeamDto,@Headers() headers: Headers,@Res() res?: Response) {
        try {
            var response = await this.teamService.add(data);
            if(response == "alreadyexist"){
              return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Team Already Exist",data:"Team Already Exist"});
          }else{
              return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Team has been added successfully",data:"Team has been added successfully"});
          }
        } catch (ex) {
            throw ex;
        }
    }

    @Put('/update/:id')
    //@UseGuards(JwtAuthGuard)
    async update(@Param('id') id: number,@Body() data :UpdateTeamDto,@Res() res: Response) {
          try {
              if (!id) throw new HttpException('Please enter a valid id', HttpStatus.BAD_REQUEST)
          var mydata = await this.teamService.update(id,data);
          return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Team has been updated",data:mydata});
          } catch (ex) {
          return res.status(HttpStatus.BAD_REQUEST).json({statusCode:res.statusCode,statusMessage:"Something went wrong",data:ex});
          }
          
      }

      @ApiBearerAuth('jwt')
      // @UseGuards(JwtAuthGuard)
      @Delete('/delete/:id')
      async delete(@Param('id') id: number,@Res() res: Response) {
          try {
              if (!id) throw new HttpException('Please enter a valid id', HttpStatus.BAD_REQUEST)
              var execute_delete_query = await this.teamService.delete(id);
            if(execute_delete_query == "deleted"){
              return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Team has been deleted",data:"Team has been deleted"});
              }else{
              return res.status(HttpStatus.BAD_REQUEST).json({statusCode:res.statusCode,statusMessage:"Something went wrong",data:""});
              }
          } catch (ex) {
              throw ex;
          }
      }


      //Team Member

      @Get('team_member/all')
      // @UseGuards(JwtAuthGuard)
      getTeamMembers() {
          try {
              return this.teamService.getTeamMembers();
          } catch (ex) {
              ex;
          }
         
      }
  
      @Get('/team_member/:id')
      // @UseGuards(JwtAuthGuard)
      async getTeamMemberById(@Param('id')id: number,@Res() res?: Response) {
          try {
          var response = await this.teamService.getTeamMemberById(id);
          if(response){
            return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Team Member detail with respect to id",data:response});
            }else{
            return res.status(HttpStatus.BAD_REQUEST).json({statusCode:res.statusCode,statusMessage:"Something went wrong",data:""});
            }
          } catch (ex) {
            ex;  
          }
          
      }
  
      @Post('/team_member/add')
  
      async addTeamMember(@Body() data: CreateTeamMemberDto,@Headers() headers: Headers,@Res() res?: Response) {
          try {
              var response = await this.teamService.addTeamMember(data);
              if(response == "alreadyexist"){
                return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Team Member Already Exist",data:"Team Member Already Exist"});
            }else{
                return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Team Member has been added successfully",data:"Team Member has been added successfully"});
            }
          } catch (ex) {
              throw ex;
          }
      }
  
      @Put('/team_member/update/:id')
      //@UseGuards(JwtAuthGuard)
      async updateTeamMember(@Param('id') id: number,@Body() data :UpdateTeamMemberDto,@Res() res: Response) {
            try {
                if (!id) throw new HttpException('Please enter a valid id', HttpStatus.BAD_REQUEST)
            var mydata = await this.teamService.updateTeamMember(id,data);
            return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Team Member has been updated",data:mydata});
            } catch (ex) {
            return res.status(HttpStatus.BAD_REQUEST).json({statusCode:res.statusCode,statusMessage:"Something went wrong",data:ex});
            }
            
        }


}
