import {
  Controller,
  Post,
  Get,
  Param,
  ParseIntPipe,
} from '@nestjs/common';
import { ProcessLoaderService } from './process-loader.service';
import { RequirePermissions } from '@common/decorators/permissions.decorator';

@Controller('admin/processes')
@RequirePermissions('approval:admin')
export class ProcessAdminController {
  constructor(private processLoader: ProcessLoaderService) {}

  /**
   * 手动同步所有流程
   * POST /api/v1/admin/processes/sync
   */
  @Post('sync')
  async syncAll() {
    const results = await this.processLoader.syncAllProcesses();
    return {
      message: 'Process sync completed',
      results,
    };
  }

  /**
   * 同步指定流程
   * POST /api/v1/admin/processes/sync/:key
   */
  @Post('sync/:key')
  async syncOne(@Param('key') key: string) {
    const result = await this.processLoader.manualSync(key);
    return {
      message: `Process ${key} sync completed`,
      result,
    };
  }

  /**
   * 回滚到指定版本
   * POST /api/v1/admin/processes/rollback/:key/:version
   */
  @Post('rollback/:key/:version')
  async rollback(
    @Param('key') key: string,
    @Param('version', ParseIntPipe) version: number,
  ) {
    const result = await this.processLoader.rollback(key, version);
    return {
      message: `Rolled back ${key} to version ${version}`,
      version: result,
    };
  }

  /**
   * 获取所有流程列表
   * GET /api/v1/admin/processes
   */
  @Get()
  async listProcesses() {
    return this.processLoader.listProcesses();
  }

  /**
   * 获取流程版本历史
   * GET /api/v1/admin/processes/:key/versions
   */
  @Get(':key/versions')
  async getVersionHistory(@Param('key') key: string) {
    return this.processLoader.getVersionHistory(key);
  }
}

