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 { CreateAssignTaskDto,CreateTaskDto,UpdateAssignTaskDto,UpdateTaskDto } from './dto/task.dto';
import { TaskService } from './task.service';
import { FilesInterceptor } from '@nestjs/platform-express';
import { diskStorage } from 'multer';
const axios = require("axios").default;

@Controller('task')
@ApiTags('Task')
export class TaskController {
    constructor(private readonly taskService: TaskService) { }
    @Get('/')
    // @UseGuards(JwtAuthGuard)
    getTaskss() {
        try {
            return this.taskService.getTasks();
        } catch (ex) {
            ex;
        }
       
    }

    @Get('/:id')
    // @UseGuards(JwtAuthGuard)
    async getTasksById(@Param('id')id: number,@Res() res?: Response) {
        try {
        var response = await this.taskService.getTaskById(id);
        if(response){
          return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Tasks 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: CreateTaskDto,@Headers() headers: Headers,@Res() res?: Response) {
        try {
            var response = await this.taskService.add(data);
            if(response == "alreadyexist"){
              return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Tasks Already Exist",data:"Tasks Already Exist"});
          }else{
              return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Tasks has been added successfully",data:"Tasks has been added successfully"});
          }
        } catch (ex) {
            throw ex;
        }
    }

    @Put('/update/:id')
    //@UseGuards(JwtAuthGuard)
    async update(@Param('id') id: number,@Body() data :UpdateTaskDto,@Res() res: Response) {
          try {
              if (!id) throw new HttpException('Please enter a valid id', HttpStatus.BAD_REQUEST)
          var mydata = await this.taskService.update(id,data);
          return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Tasks 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.taskService.delete(id);
            if(execute_delete_query == "deleted"){
              return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Tasks has been deleted",data:"Tasks has been deleted"});
              }else{
              return res.status(HttpStatus.BAD_REQUEST).json({statusCode:res.statusCode,statusMessage:"Something went wrong",data:""});
              }
          } catch (ex) {
              throw ex;
          }
      }

   
      //Team & Task Assignment

      @Get('/assignTasks/all')
      // @UseGuards(JwtAuthGuard)
      getTeamMembers() {
          try {
              return this.taskService.getAllAssignTasks();
          } catch (ex) {
              ex;
          }
         
      }
  
      @Get('/assignTasks/:id')
      // @UseGuards(JwtAuthGuard)
      async getTeamMemberById(@Param('id')id: number,@Res() res?: Response) {
          try {
          var response = await this.taskService.getAssignedTaskById(id);
          if(response){
            return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Assign Task 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('/assignTasks/add')
  
      async assignedTask(@Body() data: CreateAssignTaskDto,@Headers() headers: Headers,@Res() res?: Response) {
          try {
              var response = await this.taskService.assignedTask(data);
              if(response == "alreadyexist"){
                return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Assign Task Already Exist",data:"Assign Task Already Exist"});
            }else{
                return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Assign Task has been added successfully",data:"Assign Task has been added successfully"});
            }
          } catch (ex) {
              throw ex;
          }
      }
  
      @Put('/assignTasks/update/:id')
      //@UseGuards(JwtAuthGuard)
      async updateAssignedTask(@Param('id') id: number,@Body() data :UpdateAssignTaskDto,@Res() res: Response) {
            try {
                if (!id) throw new HttpException('Please enter a valid id', HttpStatus.BAD_REQUEST)
            var mydata = await this.taskService.updateAssignedTask(id,data);
            return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Assign Task 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('/assignTasks/delete/:id')
      async deleteAssignedTask(@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.taskService.deleteAssignedTask(id);
            if(execute_delete_query == "deleted"){
              return res.status(HttpStatus.OK).json({statusCode:res.statusCode,statusMessage:"Assigned Tasks has been deleted",data:"Tasks has been deleted"});
              }else{
              return res.status(HttpStatus.BAD_REQUEST).json({statusCode:res.statusCode,statusMessage:"Something went wrong",data:""});
              }
          } catch (ex) {
              throw ex;
          }
      }


}
