import { Controller, Get, Param, Query, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ApiBearerAuth, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
import type { LoginUserInfo } from 'src/auth/dto/login.dto';
import { GetUser } from 'src/auth/get-user.decorator';
import { MobileClientesService } from './mobile-clientes.service';

@ApiTags('Mobile · Clientes')
@ApiBearerAuth()
@UseGuards(AuthGuard('jwt'))
@Controller({ path: 'mobile/clientes', version: '1' })
export class MobileClientesController {
  constructor(private readonly clientes: MobileClientesService) {}

  @Get()
  @ApiOperation({ summary: 'Cartera del cobrador o búsqueda libre (q>=2). Filtro vencida.' })
  @ApiQuery({ name: 'q', required: false, description: 'Búsqueda libre (>=2 chars)' })
  @ApiQuery({ name: 'cartera', required: false, type: Boolean })
  @ApiQuery({ name: 'vencida', required: false, type: Boolean })
  listar(
    @GetUser() user: LoginUserInfo,
    @Query('q') q?: string,
    @Query('cartera') cartera?: string,
    @Query('vencida') vencida?: string,
  ) {
    return this.clientes.listar(user.empresa_id, user.id, {
      q,
      cartera: cartera === 'true',
      vencida: vencida === 'true',
    });
  }

  @Get(':id/estado-cuenta')
  @ApiOperation({ summary: 'Estado de cuenta del cliente (facturas/cuotas con saldo)' })
  estadoCuenta(@GetUser() user: LoginUserInfo, @Param('id') id: string) {
    return this.clientes.estadoCuenta(user.empresa_id, id);
  }
}
