import {
  Controller,
  Get,
  Post,
  Body,
  Param,
  Query,
  UseGuards,
} from '@nestjs/common';
import { PermissionsGuard } from '@modules/organization/auth/guards/permissions.guard';
import { RequirePermissions } from '@common/decorators/permissions.decorator';
import { CurrentUser } from '@common/decorators/current-user.decorator';
import type { CurrentUserPayload } from '@common/decorators/current-user.decorator';
import { AlertService } from './services/alert.service';
import { Auditable, Sensitive, Financial } from '@core/observability/audit/decorators/auditable.decorator';
import {
  QueryStockAlertsDto,
  AcknowledgeAlertDto,
  ResolveAlertDto,
} from './dto/inventory.dto';

@Controller('alerts')
export class AlertsController {
  constructor(private readonly alertService: AlertService) {}

  /**
   * 查询库存告警
   */
  @Get()
  @RequirePermissions('parts:read')
  async findAll(@Query() query: QueryStockAlertsDto) {
    return this.alertService.findAll(query);
  }

  /**
   * 获取告警详情
   */
  @Get(':id')
  @RequirePermissions('parts:read')
  async findOne(@Param('id') id: string) {
    return this.alertService.findOne(id);
  }

  /**
   * 确认告警
   */
  @Post('acknowledge')
  @Auditable()
  @Sensitive()
  @RequirePermissions('parts:alert')
  async acknowledge(
    @Body() acknowledgeDto: AcknowledgeAlertDto,
    @CurrentUser() user: CurrentUserPayload,
  ) {
    return this.alertService.acknowledge(
      acknowledgeDto,
      user.userId,
      user.username,
    );
  }

  /**
   * 解决告警
   */
  @Post('resolve')
  @Auditable()
  @Sensitive()
  @RequirePermissions('parts:alert')
  async resolve(@Body() resolveDto: ResolveAlertDto, @CurrentUser() user: CurrentUserPayload) {
    return this.alertService.resolve(
      resolveDto,
      user.userId,
      user.username,
    );
  }

  /**
   * 批量确认告警
   */
  @Post('bulk-acknowledge')
  @Auditable()
  @Sensitive()
  @RequirePermissions('parts:alert')
  async bulkAcknowledge(
    @Body('alertIds') alertIds: string[],
    @CurrentUser() user: CurrentUserPayload,
  ) {
    return this.alertService.bulkAcknowledge(
      alertIds,
      user.userId,
      user.username,
    );
  }

  /**
   * 批量解决告警
   */
  @Post('bulk-resolve')
  @Auditable()
  @Sensitive()
  @RequirePermissions('parts:alert')
  async bulkResolve(
    @Body('alertIds') alertIds: string[],
    @Body('resolution') resolution: string,
    @CurrentUser() user: CurrentUserPayload,
  ) {
    return this.alertService.bulkResolve(
      alertIds,
      resolution,
      user.userId,
      user.username,
    );
  }

  /**
   * 获取告警统计
   */
  @Get('stats/summary')
  @RequirePermissions('parts:read')
  async getStats() {
    return this.alertService.getStats();
  }

  /**
   * 自动解决已修复的告警
   */
  @Post('auto-resolve')
  @Auditable()
  @Sensitive()
  @RequirePermissions('parts:alert')
  async autoResolveFixedAlerts() {
    return this.alertService.autoResolveFixedAlerts();
  }
}

