import { Body, Controller, Delete, Get, Param, Patch, Post, SetMetadata } from '@nestjs/common';
import { ApiTags, ApiBearerAuth, ApiOperation, ApiParam } from '@nestjs/swagger';
import { AppReleasesService, AppReleaseDto } from './app-releases.service';
import { PassengerStaff } from '../../common/passenger-guards';
import { PASSENGER_PERMS } from '../../seed/passenger-permissions.registry';

@ApiTags('App Releases')
@Controller('app-releases')
export class AppReleasesController {
  constructor(private service: AppReleasesService) {}

  @Get()
  @SetMetadata('isPublic', true)
  @ApiOperation({ summary: 'List all app releases (public)' })
  getAll() {
    return this.service.getAll();
  }

  @Get('latest/:os')
  @SetMetadata('isPublic', true)
  @ApiOperation({ summary: 'Get latest release for a given OS (public)' })
  @ApiParam({ name: 'os', enum: ['android', 'ios'] })
  getLatest(@Param('os') os: string) {
    return this.service.getLatest(os);
  }

  @Post()
  @PassengerStaff(PASSENGER_PERMS.admin)
  @ApiBearerAuth('IAM-auth')
  @ApiOperation({ summary: 'Create an app release (admin)' })
  create(@Body() dto: AppReleaseDto) {
    return this.service.create(dto);
  }

  @Patch(':id')
  @PassengerStaff(PASSENGER_PERMS.admin)
  @ApiBearerAuth('IAM-auth')
  @ApiOperation({ summary: 'Update an app release (admin)' })
  update(@Param('id') id: string, @Body() dto: Partial<AppReleaseDto>) {
    return this.service.update(id, dto);
  }

  @Delete(':id')
  @PassengerStaff(PASSENGER_PERMS.admin)
  @ApiBearerAuth('IAM-auth')
  @ApiOperation({ summary: 'Delete an app release (admin)' })
  remove(@Param('id') id: string) {
    return this.service.remove(id);
  }
}
