import { Controller, Get, Post, Body, Patch, Param, Delete, Res, Req, UseGuards, Query } from '@nestjs/common';
import { WeightService } from './weight.service';
import { CreateWeightLogDto } from './dto/create-weight.dto';
import { UpdateWeightLogDto } from './dto/update-weight.dto';
import { Request, Response } from 'express';
import { UserAuthGuard } from 'src/common/guards/jwt-auth.guard';
import { UserDecorator } from 'src/common/decorator/user.decorator';

@Controller('weight')
export class WeightController {
  constructor(private readonly weightService: WeightService) { }

  @UseGuards(UserAuthGuard)
  @Post()
  async create(
    @Body() dto: CreateWeightLogDto,
    @Req() req: Request,
    @Res() res: Response,
    @UserDecorator() user: any,
  ) {
    return this.weightService.create(dto, req, res, user);
  }

  @UseGuards(UserAuthGuard)
  @Get()
  async findAll(
    @Query('period') period: 'current' | 'last' | 'all' = 'all',
    @Req() req: Request,
    @Res() res: Response,
    @UserDecorator() user: any,
  ) {
    return this.weightService.findAll(period, req, res, user);
  }

  @UseGuards(UserAuthGuard)
  @Get('history')
  async getHistory(
    @Query('period') period: '7d' | '30d' | '3m' | '6m' | 'all' = '30d',
    @Req() req: Request,
    @Res() res: Response,
    @UserDecorator() user: any,
  ) {
    return this.weightService.getHistory(period, req, res, user);
  }

  @UseGuards(UserAuthGuard)
  @Patch(':id')
  async update(
    @Param('id') id: string,
    @Body() dto: UpdateWeightLogDto,
    @Req() req: Request,
    @Res() res: Response,
    @UserDecorator() user: any,
  ) {
    return this.weightService.update(id, dto, req, res, user);
  }

  @UseGuards(UserAuthGuard)
  @Delete(':id')
  async remove(
    @Param('id') id: string,
    @Req() req: Request,
    @Res() res: Response,
    @UserDecorator() user: any,
  ) {
    return this.weightService.remove(id, req, res, user);
  }
}
