import {
  Body, Controller, Delete, Get, Param, Patch, Post, Query, Request,
} from '@nestjs/common';
import { LoansService } from './loans.service';
import { RequirePermissions } from '../../common/decorators/permissions.decorator';

@Controller('loans')
export class LoansController {
  constructor(private readonly svc: LoansService) {}

  @Get()
  @RequirePermissions('loans.view')
  findAll(
    @Query('q') q?: string,
    @Query('status') status?: string,
    @Query('loanType') loanType?: string,
    @Query('page') page?: string,
    @Query('limit') limit?: string,
  ) {
    return this.svc.findAll({
      q, status, loanType,
      page: page ? Number(page) : 1,
      limit: limit ? Number(limit) : 50,
    });
  }

  @Get(':id')
  @RequirePermissions('loans.view')
  findOne(@Param('id') id: string) {
    return this.svc.findOne(id);
  }

  @Get(':id/payments')
  @RequirePermissions('loans.view')
  findPayments(
    @Param('id') id: string,
    @Query('page') page?: string,
    @Query('limit') limit?: string,
  ) {
    return this.svc.findPayments(id, {
      page: page ? Number(page) : 1,
      limit: limit ? Number(limit) : 50,
    });
  }

  @Post()
  @RequirePermissions('loans.create')
  create(@Body() body: any, @Request() req: any) {
    return this.svc.create(body, req.user?.id);
  }

  @Patch(':id')
  @RequirePermissions('loans.update')
  update(@Param('id') id: string, @Body() body: any, @Request() req: any) {
    return this.svc.update(id, body, req.user?.id);
  }

  @Post(':id/payment')
  @RequirePermissions('loans.payment')
  makePayment(@Param('id') id: string, @Body() body: any, @Request() req: any) {
    return this.svc.makePayment(id, body, req.user?.id);
  }

  @Delete(':id')
  @RequirePermissions('loans.delete')
  remove(@Param('id') id: string) {
    return this.svc.remove(id);
  }
}
