var _a;
import { createSlice } from '@reduxjs/toolkit';
import { EActionPriorityType } from '../../../action/enum/EActionPriorityType';
import { EActionStatus } from '../../../action/enum/EActionStatus';
import { EActionType } from '../../../action/enum/EActionType';
var initialState = { action: new Array() };
export var action = createSlice({
    name: 'action',
    initialState: initialState,
    reducers: {
        setAction: function (state, action) {
            var actionIntance = action.payload.action ? action.payload.action : null;
            if (actionIntance) {
                //Keepout old region change actions
                if (actionIntance.type == EActionType.REGION_CHANGE) {
                    state.action = keepOutActions(state.action, EActionType.REGION_CHANGE);
                }
                //organice action by priority
                switch (actionIntance.priority) {
                    case EActionPriorityType.FIFO:
                        state.action.push(actionIntance);
                        state.action = state.action.sort(orderDate);
                        break;
                    case EActionPriorityType.SUPER_FIFO:
                        state.action.push(actionIntance);
                        state.action = state.action.sort(orderDate);
                        break;
                    case EActionPriorityType.LIFO:
                        state.action = state.action.sort(orderDate);
                        state.action.unshift(actionIntance);
                        break;
                    case EActionPriorityType.SUPER_LIFO:
                        state.action = state.action.sort(orderDate);
                        state.action.unshift(actionIntance);
                        break;
                }
            }
        },
        clearAction: function (state) {
            state.action = state.action.filter(function (action) { return action.id != action.id; });
        },
        deleteActionById: function (state, params) {
            state.action = state.action.filter(function (action) { return action.id != params.payload.id; });
        },
        increaseIntent: function (state, params) {
            state.action.map(function (action) {
                if (action.id == params.payload.id) {
                    action.intent = action.intent + 1;
                }
            });
        }
    },
});
function keepOutActions(actions, type) {
    for (var index = 0; index < actions.length; index++) {
        if (actions[index].type == type) {
            actions[index].status = EActionStatus.KEEPOUT;
        }
    }
    return actions;
}
function orderDate(actionA, actionB) {
    if (actionA.datetime < actionB.datetime) {
        return -1;
    }
    if (actionA.datetime > actionB.datetime) {
        return 1;
    }
    return 0;
}
// Action creators are generated for each case reducer function
export var setAction = (_a = action.actions, _a.setAction), clearAction = _a.clearAction, editAction = _a.editAction, deleteActionById = _a.deleteActionById, increaseIntent = _a.increaseIntent;
export default action.reducer;
