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

class Item(Resource):
	parser = reqparse.RequestParser()
	parser.add_argument('price', type=float, required=True, help="This field cannot be blank!")
	parser.add_argument('store_id', type=int, required=True, help="Store id cannot be blank!")

	#@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 #bad request 400

		data = Item.parser.parse_args()
		item = ItemModel(name, **data)

		try:
			item.save_to_db()
		except:
			return {'message': 'An error occured'}, 500 #Internal server error
		
		return item.json(), 201

	def delete(self, name):
		item = Item.find_by_name(name)
		if item:
			item.delete_from_db()

		return {'message': 'Item is deleted'}, 200

	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()

class ItemList(Resource):
	def get(self):
		return {'items': list(map(lambda x: x.json(), ItemModel.query.all()))}