'use strict';

import { alt } from '../alt';
import Q from 'q';

import PieceListFetcher from '../fetchers/piece_list_fetcher';


class PieceListActions {
    constructor() {
        this.generateActions(
            'updatePieceList',
            'updatePieceListRequestActions',
            'updatePropertyForPiece'
        );
    }

    fetchPieceList({ page, pageSize, search, orderBy, orderAsc, filterBy }) {
        // To prevent flickering on a pagination request,
        // we overwrite the piecelist with an empty list before
        // pieceListCount === -1 defines the loading state
        this.actions.updatePieceList({
            page,
            pageSize,
            orderBy,
            orderAsc,
            filterBy,
            search: '',
            pieceList: [],
            pieceListCount: -1,
            unfilteredPieceListCount: -1
        });

        // afterwards, we can load the list
        return Q.Promise((resolve, reject) => {
            PieceListFetcher
                .fetch({ page, pageSize, search, orderBy, orderAsc, filterBy })
                .then((res) => {
                    this.actions.updatePieceList({
                        page,
                        pageSize,
                        search,
                        orderBy,
                        orderAsc,
                        filterBy,
                        pieceList: res.pieces,
                        pieceListCount: res.count,
                        unfilteredPieceListCount: res.unfiltered_count
                    });
                    resolve();
                })
                .catch((err) => reject(err));
        });
    }

    fetchPieceRequestActions() {
        PieceListFetcher
            .fetchRequestActions()
            .then((res) => {
                this.actions.updatePieceListRequestActions(res);
            })
            .catch((err) => console.logGlobal(err));
    }
}

export default alt.createActions(PieceListActions);