/**
 * This file implements actions related to global entities store.
 */

export const PUSH_ENTITIES = "PUSH_ENTITIES";
/**
 * Push some entities in the global entities store.
 *
 * @param   entities    An entities mapping, such as the one in the entities
 *                      store: type => id => entity.
 * @param   refCountType    An array of entities type to consider for
 *                          increasing reference counting (elements loaded as nested objects)
 * @return  A PUSH_ENTITIES action.
 */
export function pushEntities(entities, refCountType=["album", "artist", "song"]) {
    return {
        type: PUSH_ENTITIES,
        payload: {
            entities: entities,
            refCountType: refCountType,
        },
    };
}


export const INCREMENT_REFCOUNT = "INCREMENT_REFCOUNT";
/**
 * Increment the reference counter for given entities.
 *
 * @param   ids     A mapping type => list of IDs, each ID being the one of an
 *                  entity to increment reference counter. List of IDs must be
 *                  a JS Object.
 * @return  An INCREMENT_REFCOUNT action.
 */
export function incrementRefCount(entities) {
    return {
        type: INCREMENT_REFCOUNT,
        payload: {
            entities: entities,
        },
    };
}


export const DECREMENT_REFCOUNT = "DECREMENT_REFCOUNT";
/**
 * Decrement the reference counter for given entities.
 *
 * @param   ids     A mapping type => list of IDs, each ID being the one of an
 *                  entity to decrement reference counter. List of IDs must be
 *                  a JS Object.
 * @return  A DECREMENT_REFCOUNT action.
 */
export function decrementRefCount(entities) {
    return {
        type: DECREMENT_REFCOUNT,
        payload: {
            entities: entities,
        },
    };
}
