# -*- coding: utf-8 -*-
"""
Created on Mon May 20 13:51:31 2021

@author: Admin
"""

from flask_restful import Resource, reqparse
from flask_jwt import jwt_required
from models.item import ItemModel

class Item(Resource):    
    parser = reqparse.RequestParser()
    parser.add_argument('price',
        type=float,
        required=True,
        help="This field cannot be left blank!"
    )
    parser.add_argument('store_id',
        type=int,
        required=True,
        help="Every item needs a store id."
    )
        
#methods within a file should be separated by one new line        
    @jwt_required()
    def get(self, name):
        item = ItemModel.find_by_name(name)
        if item:
            return item.json()    
        return {'message' : 'Item not found.'}, 404        

    def post(self, name):
        if ItemModel.find_by_name(name):
            return {'message' : "An item with name '{}' already exists.".format(name)}, 400   
        
        data = Item.parser.parse_args()
        
        item = ItemModel(name, **data)
        
        try:
            item.save_to_db()
        except:
            return {'message' : 'An error occurred inserting the item.'}, 500 # Internal Server error
        
        return item.json(), 201
    
#    @jwt_required()
    def delete(self, name):
        item = ItemModel.find_by_name(name)
        if item:
            item.delete_from_db()
        return {'message' : 'Item deleted'}
    
    def put(self, name):
        data = Item.parser.parse_args()
        
        item = ItemModel.find_by_name(name)
        
        if item is None:
            item = ItemModel(name, **data)
        else:
            item.price = data['price']
            
        item.save_to_db()
        
        return item.json()      
     
#classes within a class should be separated by two new lines             
class ItemList(Resource):
    def get(self):
        return {'items' : [item.json() for item in ItemModel.query.all()]} # {'items' : list(map(lambda x:x.json(), ItemModel.query.all()))}