import { IsString } from 'class-validator';
import { NotAcceptableError, NotFoundError } from 'routing-controllers';

/**
 * Error to throw when a runner couldn't be found.
 */
export class RunnerNotFoundError extends NotFoundError {
	@IsString()
	name = "RunnerNotFoundError"

	@IsString()
	message = "Runner not found!"
}

/**
 * Error to throw when two runners' ids don't match.
 * Usually occurs when a user tries to change a runner's id.
 */
export class RunnerIdsNotMatchingError extends NotAcceptableError {
	@IsString()
	name = "RunnerIdsNotMatchingError"

	@IsString()
	message = "The ids don't match! \n And if you wanted to change a runner's id: This isn't allowed!"
}

/**
 * Error to throw when a runner is missing his group association.
 */
export class RunnerGroupNeededError extends NotAcceptableError {
	@IsString()
	name = "RunnerGroupNeededError"

	@IsString()
	message = "Runner's need to be part of one group (team or organization)! \n You provided neither."
}

/**
 * Error to throw when a citizen runner has no mail-address.
 */
export class RunnerEmailNeededError extends NotAcceptableError {
	@IsString()
	name = "RunnerEmailNeededError"

	@IsString()
	message = "Citizenrunners have to provide an email address for verification and contacting."
}

/**
 * Error to throw when a runner already requested a new selfservice link in the last 30s.
 */
export class RunnerSelfserviceTimeoutError extends NotAcceptableError {
	@IsString()
	name = "RunnerSelfserviceTimeoutError"

	@IsString()
	message = "You can only reqest a new token every 30s."
}

/**
* Error to throw when a runner still has distance donations associated.
*/
export class RunnerHasDistanceDonationsError extends NotAcceptableError {
	@IsString()
	name = "RunnerHasDistanceDonationsError"

	@IsString()
	message = "This runner still has distance donations associated with it. \n If you want to delete this runner with all it's donations and teams add `?force` to your query."
}