import {
  Controller,
  Get,
  Put,
  Post,
  Delete,
  Body,
  UseGuards,
  UseInterceptors,
  UploadedFile,
  BadRequestException,
} from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import { BusinessesService } from './businesses.service';
import { UpdateBusinessDto } from './dto/update-business.dto';
import { RegisterDigitalCertDto } from './dto/register-digital-cert.dto';
import { RegisterHometaxDto } from './dto/register-hometax.dto';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
import { CurrentUser } from '../../common/decorators/current-user.decorator';

@Controller('businesses')
@UseGuards(JwtAuthGuard)
export class BusinessesController {
  constructor(private readonly businessesService: BusinessesService) {}

  @Get()
  getBusiness(@CurrentUser() user: { id: number; email: string }) {
    return this.businessesService.getBusiness(user.id);
  }

  @Put()
  updateBusiness(
    @CurrentUser() user: { id: number; email: string },
    @Body() dto: UpdateBusinessDto,
  ) {
    return this.businessesService.updateBusiness(user.id, dto);
  }

  @Post('ocr-cert')
  @UseInterceptors(
    FileInterceptor('file', {
      limits: { fileSize: 10 * 1024 * 1024 },
      fileFilter: (_req, file, cb) => {
        if (
          !file.mimetype.match(
            /image\/(png|jpg|jpeg|gif|bmp|webp)|application\/pdf/,
          )
        ) {
          return cb(
            new BadRequestException('이미지 또는 PDF 파일만 업로드 가능합니다'),
            false,
          );
        }
        cb(null, true);
      },
    }),
  )
  ocrCert(
    @CurrentUser() user: { id: number; email: string },
    @UploadedFile() file: Express.Multer.File,
  ) {
    if (!file) {
      throw new BadRequestException('파일이 업로드되지 않았습니다');
    }
    return this.businessesService.ocrBusinessCert(user.id, file);
  }

  @Post('upload-cert')
  uploadCert(
    @CurrentUser() user: { id: number; email: string },
    @Body('certUrl') certUrl: string,
  ) {
    return this.businessesService.uploadCert(user.id, certUrl);
  }

  @Post('digital-cert')
  registerDigitalCert(
    @CurrentUser() user: { id: number; email: string },
    @Body() dto: RegisterDigitalCertDto,
  ) {
    return this.businessesService.registerDigitalCert(user.id, dto);
  }

  @Post('hometax')
  registerHometax(
    @CurrentUser() user: { id: number; email: string },
    @Body() dto: RegisterHometaxDto,
  ) {
    return this.businessesService.registerHometax(user.id, dto);
  }

  @Delete('hometax')
  disconnectHometax(@CurrentUser() user: { id: number; email: string }) {
    return this.businessesService.disconnectHometax(user.id);
  }
}
