import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';
import { check } from 'meteor/check';
import { Products } from './products';
import { ShopLists } from './shopList';

export const ListItems = new Mongo.Collection('listitems');

ListItems.allow({
    insert: function(userId, doc){
        // if use id exists, allow insert
        return !!userId;
    },
});

Meteor.methods({
    'add.listItem' (itemName, listId) {
        check(itemName, String);
        check(listId, String);

        if (!this.userId) {
            throw new Meteor.Error('You are not allowed to add items. Make sure you are logged in with valid user credentials.');
        }

        // look up the item from the Products collection
        let prodInfo = Products.findOne({ prodName: itemName });
        if (typeof prodInfo == "undefined") {
            Meteor.call("add.product", itemName, "", "", "", function(err, result) {
                if (err) {
                    console.log("   ERROR adding item to products: " + err);
                } else {
                    // console.log("    SUCCESS adding item to Products.");
                    return ListItems.insert({
                        itemName: itemName,
                        listId: listId,
                        prodId: result,
                        addedBy: this.userId,
                        itemCategory: "",
                        itemStore: "",
                        itemLocation: "",
                        itemOrdered: false,
                        itemReceived: false,
                        dateAddedToList: new Date(),
                    });
                }
            });
        } else {
            return ListItems.insert({
                itemName: itemName,
                listId: listId,
                prodId: prodInfo._id,
                addedBy: this.userId,
                itemCategory: prodInfo.prodCategory,
                itemStore: prodInfo.prodStore,
                itemLocation: prodInfo.prodLocation,
                itemOrdered: false,
                itemReceived: false,
                dateAddedToList: new Date(),
            });
        }


        
    },
    'setOrdered.listItem' (itemId) {
        check(itemId, String);

        if (!this.userId) {
            throw new Meteor.Error('You are not allowed to set items as ordered. Make sure you are logged in with valid user credentials.');
        }

        return ListItems.update({ _id: itemId }, {
            $set: {
                itemOrdered: true,
                dateOrdered: new Date(),
            }
        });
    },
    'setAllOrdered.listItem' (shopListId) {
        // set all items that are not already set as ordered, or set as received to ordered on this list

    },
    'setNotOrdered.listItem' (itemId) {
        check(itemId, String);

        if (!this.userId) {
            throw new Meteor.Error('You are not allowed to set items as not ordered. Make sure you are logged in with valid user credentials.');
        }

        return ListItems.update({ _id: itemId }, {
            $set: {
                itemOrdered: false,
                dateUnOrdered: new Date(),
            }
        });
    },
    'setReceived.listItem' (itemId) {
        check(itemId, String);

        if (!this.userId) {
            throw new Meteor.Error('You are not allowed to set items as received. Make sure you are logged in with valid user credentials.');
        }

        return ListItems.update({ _id: itemId }, {
            $set: {
                itemReceived: true,
                dateReceived: new Date(),
            }
        });

    },
    'setNotReceived.listItem' (shopListId) {
        check(itemId, String);

        if (!this.userId) {
            throw new Meteor.Error('You are not allowed to set items as not received. Make sure you are logged in with valid user credentials.');
        }

        return ListItems.update({ _id: itemId }, {
            $set: {
                itemReceived: false,
                dateNotReceived: new Date(),
            }
        });
    },
    'setAllReceived.listItem' () {
        // set all items that are not already listed as received to received on this list

    },
    'edit.listItem' (itemId, itemName) {
        check(itemId, String);
        check(itemName, String);

        if (!this.userId) {
            throw new Meteor.Error('You are not allowed to add items. Make sure you are logged in with valid user credentials.');
        }

        return ListItems.update({ _id: itemId }, {
            $set: {
                itemName: itemName,
            }
        });
    },
    'delete.listItem' (itemId) {
        check(itemId, String);

        if (!this.userId) {
            throw new Meteor.Error('You are not allowed to delete list items. Make sure you are logged in with valid user credentials.');
        }

        return ListItems.remove({ _id: itemId });
    }
});