import { IsDateString, IsNotEmpty, IsNumber } from "class-validator";
import { TrackScan } from '../entities/TrackScan';
import { ResponseObjectType } from '../enums/ResponseObjectType';
import { IResponse } from './IResponse';
import { ResponseRunnerCard } from './ResponseRunnerCard';
import { ResponseScan } from './ResponseScan';
import { ResponseScanStation } from './ResponseScanStation';
import { ResponseTrack } from './ResponseTrack';

/**
 * Defines the trackScan response.
*/
export class ResponseTrackScan extends ResponseScan implements IResponse {
    /**
    * The responseType.
    * This contains the type of class/entity this response contains.
    */
    responseType: ResponseObjectType = ResponseObjectType.TRACKSCAN;

    /**
     * The scan's associated track.
     */
    @IsNotEmpty()
    track: ResponseTrack;

    /**
     * The runnerCard associated with the scan.
     */
    @IsNotEmpty()
    card: ResponseRunnerCard;

    /**
     * The scanning station that created the scan.
     */
    @IsNotEmpty()
    station: ResponseScanStation;

    /**
     * The scan's creation timestamp.
     */
    @IsDateString()
    @IsNotEmpty()
    timestamp: number;

    /**
   * The scan's lap time.
   * This simply get's calculated from the last lap time;
   */
    @IsNumber()
    lapTime: number;

    /**
     * Creates a ResponseTrackScan object from a scan.
     * @param scan The trackSscan the response shall be build for.
     */
    public constructor(scan: TrackScan) {
        super(scan);
        this.track = new ResponseTrack(scan.track);
        if (scan.card) { scan.card.toResponse(); }
        if (scan.station) { scan.station.toResponse(); }
        this.timestamp = scan.timestamp;
        this.distance = scan.distance;
        this.lapTime = scan.lapTime;
    }
}
