import { Action, ActionReducerMap } from '@ngrx/store';
import { HypermediaActions, HypermediaActionTypes, ReceivedHypermedia } from '../actions';
import { Hypermedia } from 'first-npm-package-nicule/core';

export const hypermediaReducers: ActionReducerMap<HypermediaState, HypermediaActions> = {
    hypermedia: hypermediaReducer
};

export interface HypermediaState {
    hypermedia: HypermediaScopePathMap;
}

export interface HypermediaScopePathMap {
    [scope: string]: {
        [path: string]: {
            data: Hypermedia
            download?: number,
            upload?: number
        }
    };
}

export function hypermediaReducer(state: HypermediaScopePathMap = {}, action: HypermediaActions): HypermediaScopePathMap {
    switch (action.type) {
        case HypermediaActionTypes.RECEIVED_HYPERMEDIA:
            return {
                ...state,
                [action.payload.scope]: {
                    ...state[action.payload.scope],
                    [action.payload.path]: {
                        data: (action as ReceivedHypermedia).payload.hypermedia
                    }
                }
            };
        default: return state;
    }
}
