import {
    IsBoolean,
    IsInt,

    IsNotEmpty,

    IsObject,

    IsOptional,
    IsPositive,
    IsString
} from "class-validator";
import { ScanStation } from '../entities/ScanStation';
import { ResponseObjectType } from '../enums/ResponseObjectType';
import { IResponse } from './IResponse';
import { ResponseTrack } from './ResponseTrack';

/**
 * Defines the statsClient response.
*/
export class ResponseScanStation implements IResponse {
    /**
    * The responseType.
    * This contains the type of class/entity this response contains.
    */
    responseType: ResponseObjectType = ResponseObjectType.SCANSTATION;

    /**
     * The client's id.
     */
    @IsInt()
    id: number;

    /**
     * The client's description.
     */
    @IsString()
    @IsOptional()
    description?: string;

    /**
     * The client's api key.
     * Only visible on creation or regeneration.
     */
    @IsString()
    @IsOptional()
    key: string;

    /**
     * The client's api key prefix.
     */
    @IsString()
    @IsNotEmpty()
    prefix: string;

    @IsObject()
    @IsNotEmpty()
    track: ResponseTrack;

    /**
     * Is this station enabled?
     */
    @IsBoolean()
    enabled?: boolean = true;

    @IsInt()
    @IsPositive()
    created_at: number;

    @IsInt()
    @IsPositive()
    updated_at: number;

    /**
     * Creates a ResponseStatsClient object from a statsClient.
     * @param client The statsClient the response shall be build for.
     */
    public constructor(station: ScanStation) {
        this.id = station.id;
        this.description = station.description;
        this.prefix = station.prefix;
        this.key = "Only visible on creation.";
        if (station.track) { this.track = station.track.toResponse(); }
        this.enabled = station.enabled;
        this.created_at = station.created_at;
        this.updated_at = station.updated_at;
    }
}
