import { Controller, Get, Injectable, Param, UseGuards } from '@nestjs/common';
import { FileService } from './file.service';
import {
  ApiBearerAuth,
  ApiOperation,
  ApiTags,
  ApiOkResponse,
} from '@nestjs/swagger';
import { UserDTO } from 'src/common/dto/user-dto';
import { RequestUser } from 'src/common/request-user';
import { GetFileTokenDTO } from './dto/get-file-token-dto';
import { JwtAuthGuard } from '../common/guards/jwt.auth.guard';
import { OptTokenOrJwtAuthGuard } from '../guards/opt-token-or-jwt.auth.guard';

@ApiTags('file')
@Controller('file')
@UseGuards(OptTokenOrJwtAuthGuard)
@ApiBearerAuth()
@Injectable()
export class FileController {
  constructor(private readonly fileService: FileService) {}

  @Get(':store/token')
  @UseGuards(JwtAuthGuard)
  @ApiOperation({
    summary: 'Get access to files',
  })
  @ApiOkResponse({
    type: GetFileTokenDTO,
  })
  async getFileToken(
    @RequestUser() account: UserDTO,
    @Param('store') store: string,
  ): Promise<GetFileTokenDTO> {
    return {
      token: await this.fileService.getFileToken(account, store),
    };
  }
}
