import {
  Body,
  Controller,
  Get,
  Param,
  Post,
} from '@nestjs/common';
import { ApiBearerAuth, ApiBody, ApiTags } from '@nestjs/swagger';
import { IsEnum, IsString } from 'class-validator';
import { ImportKind } from '@prisma/client';
import { ImportsService } from './imports.service';
import { Roles } from '../../common/decorators/roles.decorator';
import { CurrentUser, AuthenticatedUser } from '../../common/decorators/current-user.decorator';

class ImportCsvDto {
  @IsEnum(ImportKind) kind!: ImportKind;
  @IsString() filename!: string;
  @IsString() csvContent!: string;
}

@ApiTags('imports')
@ApiBearerAuth()
@Controller('imports')
export class ImportsController {
  constructor(private readonly service: ImportsService) {}

  @Post()
  @Roles('SUPERADMIN', 'SYNDIC')
  @ApiBody({ type: ImportCsvDto })
  importCsv(@CurrentUser() user: AuthenticatedUser, @Body() dto: ImportCsvDto) {
    return this.service.import(user, dto.kind, dto.filename, dto.csvContent);
  }

  @Get()
  @Roles('SUPERADMIN', 'SYNDIC')
  list(@CurrentUser() user: AuthenticatedUser) {
    return this.service.list(user);
  }

  @Get(':id')
  @Roles('SUPERADMIN', 'SYNDIC')
  findOne(@CurrentUser() user: AuthenticatedUser, @Param('id') id: string) {
    return this.service.findOne(user, id);
  }
}
