import {
  Body,
  Controller,
  Delete,
  Get,
  Param,
  Post,
  Put,
  Query,
  Req,
} from '@nestjs/common';
import { DartaChalaniService } from './darta-chalani.service';
import { CreateDartaChalaniDto, UpdateDartaChalaniDto } from './darta-chalani.dto';
import { Request } from 'express';

@Controller('darta-chalani')
export class DartaChalaniController {
  constructor(private readonly svc: DartaChalaniService) {}

  private sub(req: Request) { return (req as any).tenantSubdomain as string; }
  private uid(req: Request) { return (req as any).user?.sub as string | undefined; }

  @Get()
  async findAll(
    @Req() req: Request,
    @Query('type') type?: string,
    @Query('q') q?: string,
    @Query('page') page?: string,
    @Query('limit') limit?: string,
  ) {
    const data = await this.svc.findAll(this.sub(req), {
      type,
      q,
      page: page ? +page : 1,
      limit: limit ? +limit : 20,
    });
    return { success: true, data };
  }

  @Get('next-reg')
  async nextReg(
    @Req() req: Request,
    @Query('type') type: string,
    @Query('fiscalYear') fiscalYear: string,
  ) {
    const data = await this.svc.nextRegNumber(this.sub(req), type, fiscalYear);
    return { success: true, data };
  }

  @Get(':id')
  async findOne(@Req() req: Request, @Param('id') id: string) {
    const data = await this.svc.findOne(this.sub(req), id);
    return { success: true, data };
  }

  @Post()
  async create(@Req() req: Request, @Body() dto: CreateDartaChalaniDto) {
    const data = await this.svc.create(this.sub(req), dto, this.uid(req));
    return { success: true, data };
  }

  @Put(':id')
  async update(@Req() req: Request, @Param('id') id: string, @Body() dto: UpdateDartaChalaniDto) {
    const data = await this.svc.update(this.sub(req), id, dto, this.uid(req));
    return { success: true, data };
  }

  @Delete(':id')
  async remove(@Req() req: Request, @Param('id') id: string) {
    const data = await this.svc.remove(this.sub(req), id);
    return { success: true, data };
  }
}
