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

import { Criterion } from './model';

export const CHANGE_STEP = 'Change Search Step';
export const SELECT_DATASET = 'Select Dataset';
export const UPDATE_DEFAULT_CRITERIA_LIST = 'Update Default Criteria List Action';
export const UPDATE_CRITERIA_LIST = 'Update Criteria List';
export const ADD_CRITERION = 'Add Criterion';
export const DELETE_CRITERION = 'Delete Criterion';
export const UPDATE_DEFAULT_OUTPUT_LIST = 'Update Default Output List';
export const UPDATE_OUTPUT_LIST = 'Update Output List';

export class ChangeStepAction implements Action {
    type = CHANGE_STEP;

    constructor(public payload: string) { }
}

export class SelectDatasetAction implements Action {
    type = SELECT_DATASET;

    constructor(public payload: string) { }
}

export class UpdateDefaultCriteriaListAction implements Action {
    type = UPDATE_DEFAULT_CRITERIA_LIST;

    constructor(public payload: Criterion[]) { }
}

export class UpdateCriteriaListAction implements Action {
    type = UPDATE_CRITERIA_LIST;

    constructor(public payload: Criterion[]) { }
}

export class AddCriterionAction implements Action {
    type = ADD_CRITERION;

    constructor(public payload: Criterion) { }
}

export class DeleteCriterionAction implements Action {
    type = DELETE_CRITERION;

    constructor(public payload: number) { }
}

export class UpdateDefaultOutputListAction implements Action {
    type = UPDATE_DEFAULT_OUTPUT_LIST;

    constructor(public payload: number[]) { }
}

export class UpdateOutputListAction implements Action {
    type = UPDATE_OUTPUT_LIST;

    constructor(public payload: number[]) { }
}

export type Actions
    = ChangeStepAction
    | SelectDatasetAction
    | UpdateDefaultCriteriaListAction
    | UpdateCriteriaListAction
    | AddCriterionAction
    | DeleteCriterionAction
    | UpdateDefaultOutputListAction
    | UpdateOutputListAction;