import {
  Controller,
  Post,
  Get,
  Patch,
  Delete,
  Body,
  Param,
  Req,
  UseGuards,
  HttpCode,
  HttpStatus,
  ParseUUIDPipe,
} from '@nestjs/common';
import { AdminsService } from './admins.service';
import { AdminAuthGuard } from './admin-auth.guard';
import { SuperAdminGuard } from './super-admin.guard';
import { AdminLoginDto, CreateAdminDto, UpdateAdminDto, ResetAdminPasswordDto } from './admins.dto';

@Controller('admins')
export class AdminsController {
  constructor(private readonly adminsService: AdminsService) {}

  @Post('login')
  @HttpCode(HttpStatus.OK)
  async login(@Body() body: AdminLoginDto) {
    return this.adminsService.login(body);
  }

  @Get('me')
  @UseGuards(AdminAuthGuard)
  async me(@Req() req: any) {
    return this.adminsService.me(req.admin.id);
  }

  @Get()
  @UseGuards(AdminAuthGuard)
  async list() {
    return this.adminsService.list();
  }

  @Post()
  @UseGuards(AdminAuthGuard, SuperAdminGuard)
  async create(@Body() body: CreateAdminDto, @Req() req: any) {
    return this.adminsService.create(body, req.admin.id);
  }

  @Patch(':id')
  @UseGuards(AdminAuthGuard, SuperAdminGuard)
  async update(
    @Param('id', ParseUUIDPipe) id: string,
    @Body() body: UpdateAdminDto,
    @Req() req: any,
  ) {
    return this.adminsService.update(id, body, req.admin.id);
  }

  @Delete(':id')
  @UseGuards(AdminAuthGuard, SuperAdminGuard)
  async remove(@Param('id', ParseUUIDPipe) id: string, @Req() req: any) {
    return this.adminsService.remove(id, req.admin.id);
  }

  @Post(':id/reset-password')
  @HttpCode(HttpStatus.OK)
  @UseGuards(AdminAuthGuard)
  async resetPassword(
    @Param('id', ParseUUIDPipe) id: string,
    @Body() body: ResetAdminPasswordDto,
    @Req() req: any,
  ) {
    return this.adminsService.resetPassword(id, body, req.admin.id);
  }
}
