import { Action } from '@ngrx/store';

import { ConeSearch, Resolver } from './model';

export const RETRIEVE_COORDINATES = '[ConeSearch] Retrieve Coordinates';
export const RETRIEVE_COORDINATES_SUCCESS = '[ConeSearch] Retrieve Coordinates Success';
export const RETRIEVE_COORDINATES_FAIL = '[ConeSearch] Retrieve Coordinates Fail';
export const DELETE_RESOLVER = '[ConeSearch] Delete Resolver';
export const IS_VALID_CONE_SEARCH = '[ConeSearch] Is Valid Cone Search';
export const ADD_CONE_SEARCH = '[ConeSearch] Add Cone Search';
export const ADD_CONE_SEARCH_FROM_URL = '[ConeSearch] Add Cone Search From Url';
export const DELETE_CONE_SEARCH = '[ConeSearch] Delete Cone Search';


export class RetrieveCoordinatesAction implements Action {
    readonly type = RETRIEVE_COORDINATES;

    constructor(public payload: string) { }
}

export class RetrieveCoordinatesSuccessAction implements Action {
    readonly type = RETRIEVE_COORDINATES_SUCCESS;

    constructor(public payload: Resolver) { }
}

export class RetrieveCoordinatesFailAction implements Action {
    readonly type = RETRIEVE_COORDINATES_FAIL;

    constructor(public payload: string | null) { }
}

export class DeleteResolverAction implements Action {
    readonly type = DELETE_RESOLVER;

    constructor(public payload: {} = null) { }
}

export class IsValidConeSearchAction implements Action {
    readonly type = IS_VALID_CONE_SEARCH;

    constructor(public payload: boolean) { }
}

export class AddConeSearchAction implements Action {
    readonly type = ADD_CONE_SEARCH;

    constructor(public payload: ConeSearch) { }
}

export class AddConeSearchFromUrlAction implements Action {
    readonly type = ADD_CONE_SEARCH_FROM_URL;

    constructor(public payload: ConeSearch) { }
}

export class DeleteConeSearchAction implements Action {
    readonly type = DELETE_CONE_SEARCH;

    constructor(public payload: {} = null) { }
}

export type Actions
    = RetrieveCoordinatesAction
    | RetrieveCoordinatesSuccessAction
    | RetrieveCoordinatesFailAction
    | DeleteResolverAction
    | IsValidConeSearchAction
    | AddConeSearchAction
    | AddConeSearchFromUrlAction
    | DeleteConeSearchAction;