import {
  Controller,
  Delete,
  Get,
  Param,
  Post,
  Query,
  Res,
  UploadedFile,
  UseInterceptors,
} from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import { FinalProductsService } from './final-products.service';

@Controller('final-products')
export class FinalProductsController {
  constructor(private readonly finalProductsService: FinalProductsService) {}

  @Get()
  list(@Query() query: Record<string, string>) {
    return this.finalProductsService.list(query);
  }

  @Get('export')
  async export(@Query() query: Record<string, string>, @Res() response: any) {
    const file = await this.finalProductsService.exportFile(query);

    response.setHeader('Content-Type', file.mime);
    response.setHeader(
      'Content-Disposition',
      `attachment; filename="${file.fileName}"`,
    );
    response.send(Buffer.from(file.base64, 'base64'));
  }

  @Post('import')
  @UseInterceptors(FileInterceptor('file'))
  import(@UploadedFile() file: any) {
    if (!file?.buffer || !file?.originalname) {
      return {
        totalRows: 0,
        created: 0,
        updated: 0,
        skipped: 1,
        errors: ['Import file is required.'],
      };
    }

    return this.finalProductsService.importFile(
      file.originalname,
      file.buffer,
      file.mimetype,
    );
  }

  @Delete(':id')
  delete(@Param('id') id: string) {
    return this.finalProductsService.delete(id);
  }
}
