import {
  BadRequestException,
  Body,
  Controller,
  Get,
  Param,
  Patch,
  Post,
  Req,
  UseGuards,
} from "@nestjs/common";
import { JwtAuthGuard } from "./jwt-auth.guard";
import { StockMovementSheetsService } from "./stock-movement-sheets.service";

@Controller("stock-movement-sheets")
@UseGuards(JwtAuthGuard)
export class StockMovementSheetsController {
  constructor(private readonly svc: StockMovementSheetsService) {}

  @Post()
  create(
    @Body() body: Parameters<StockMovementSheetsService["create"]>[0],
    @Req() req: Request & { user: { name: string } },
  ) {
    return this.svc.create({ ...body, submittedBy: req.user.name });
  }

  @Get()
  findAll() {
    return this.svc.findAll();
  }

  @Get(":id")
  findOne(@Param("id") id: string) {
    return this.svc.findOne(id);
  }

  @Patch(":id")
  update(
    @Param("id") id: string,
    @Body() body: Parameters<StockMovementSheetsService["create"]>[0],
  ) {
    return this.svc.update(id, body);
  }

  @Post(":id/approve")
  approve(
    @Param("id") id: string,
    @Req() req: Request & { user: { name: string; role: string } },
  ) {
    if (req.user.role !== "store_manager" && req.user.role !== "super_admin") {
      throw new BadRequestException("Only store managers can approve sheets");
    }
    return this.svc.approve(id, req.user.name);
  }

  @Post(":id/reject")
  reject(
    @Param("id") id: string,
    @Body() body: { reason?: string },
    @Req() req: Request & { user: { name: string; role: string } },
  ) {
    if (req.user.role !== "store_manager" && req.user.role !== "super_admin") {
      throw new BadRequestException("Only store managers can reject sheets");
    }
    return this.svc.reject(id, req.user.name, body.reason ?? "");
  }
}
