import { Controller, Delete, Param, UseGuards } from '@nestjs/common';
import { ApiOperation, ApiParam, ApiSecurity, ApiTags } from '@nestjs/swagger';
import { AppTokenGuard } from 'src/app-token.guard';
import { RedisService } from './redis.service';

@ApiTags('Cache')
@Controller({ path: 'cache', version: '1' })
@ApiSecurity('AppKey')
@UseGuards(AppTokenGuard)
export class RedisController {
  constructor(private readonly redisService: RedisService) {}

  @ApiOperation({ summary: 'Limpia todo el cache de Redis' })
  async resetAll() {
    await this.redisService.reset();
    return {
      success: true,
      message: 'Cache limpiado exitosamente',
    };
  }

  @Delete('referenciales')
  @ApiOperation({ summary: 'Invalida el cache de referenciales' })
  async invalidateReferenciales() {
    await this.redisService.invalidateReferenciales();
    return {
      success: true,
      message: 'Cache de referenciales invalidado',
    };
  }

  @Delete(':key')
  @ApiOperation({ summary: 'Elimina una key específica del cache' })
  @ApiParam({ name: 'key', description: 'Key del cache a eliminar (ej: referenciales:all)' })
  async deleteKey(@Param('key') key: string) {
    await this.redisService.del(key);
    return {
      success: true,
      message: `Cache key "${key}" eliminada`,
    };
  }
}
