import { IsInt, IsObject, IsPositive } from 'class-validator';
import { DistanceDonation } from '../entities/DistanceDonation';
import { ResponseObjectType } from '../enums/ResponseObjectType';
import { IResponse } from './IResponse';
import { ResponseDonation } from './ResponseDonation';
import { ResponseRunner } from './ResponseRunner';

/**
 * Defines the distance donation response.
*/
export class ResponseDistanceDonation extends ResponseDonation implements IResponse {
    /**
     * The responseType.
     * This contains the type of class/entity this response contains.
     */
    responseType: ResponseObjectType = ResponseObjectType.DISTANCEDONATION;

    /**
     * The donation's associated runner.
     * Used as the source of the donation's distance.
     */
    @IsObject()
    runner: ResponseRunner;

    /**
     * The donation's amount donated per distance.
     * The amount the donor set to be donated per kilometer that the runner ran.
     */
    @IsInt()
    @IsPositive()
    amountPerDistance: number;

    /**
     * Creates a ResponseDistanceDonation object from a scan.
     * @param donation The distance donation the response shall be build for.
     */
    public constructor(donation: DistanceDonation) {
        super(donation);
        if (donation.runner) { this.runner = donation.runner.toResponse(); }
        this.amountPerDistance = donation.amountPerDistance;
    }
}
