import { ApiExtraModels, ApiProperty } from "@nestjs/swagger";
import { IsArray, IsDefined, IsInt, IsNotEmpty } from "class-validator";
import { EsResponseDto } from "./elastic/es-response.dto";

/**
 * List of allowed properties in this DTO
 */
const allowedProperties = ['data', 'status'];

/**
 * Elasticsearch response DTO
 */
@ApiExtraModels()
export class SearchResultDto {
    /**
     * Status code
     */
    @IsDefined()
    @IsNotEmpty()
    @IsInt()
    @ApiProperty({
        description: 'Status code',
        example: 200,
    })
    statusCode: number;
    
    /**
     * All the data acquired.
     */
    @IsDefined()
    @IsNotEmpty()
    @IsArray()
    @ApiProperty({
        description: 'Data acquired from the Elasticsearch',
        example: {
            took: 1,
            timed_out: false,
            _shards: {},
            hits: {}
        },
    })
    data: EsResponseDto;

    /**
     * Constructs an object with provided parameters
     * @param code 
     * @param data 
     */
    constructor(code: number, data: EsResponseDto) {
        this.statusCode = code;
        this.data = data;
    }
}