from flask_restful import reqparse, abort, Resource, marshal_with, fields
from . import db_session
from recources.Model.UserFavorites import UserFavorites
from flask import jsonify

from .Model.Dish import Dish


def abort_if_user_favorites_not_found(user_id, dish_id):
    db_sess = db_session.create_session()
    user = db_sess.query(UserFavorites).get({
        "userId": user_id,
        "dishId": dish_id
    })
    if not user:
        abort(404, message=f'User favorites {user_id} not found')


class UserFavoriteResource(Resource):
    def get(self, user_id, dish_id):
        abort_if_user_favorites_not_found(user_id)
        db_sess = db_session.create_session()
        users = db_sess.query(UserFavorites).get({
            "userId": user_id,
            "dishId": dish_id
        })
        return jsonify(
            {'users_favorite': users.to_dict()}
        )

    def delete(self, user_id, dish_id):
        abort_if_user_favorites_not_found(user_id)
        db_sess = db_session.create_session()
        user = db_sess.query(UserFavorites).get({
            "userId": user_id,
            "dishId": dish_id
        })
        db_sess.delete(user)
        db_sess.commit()
        return jsonify({'success': 'OK'})
    
    def post(self, user_id, dish_id):
        db_sess = db_session.create_session()

        user = UserFavorites()
        user.userId = user_id
        user.dishId = dish_id

        db_sess.add(user)
        db_sess.commit()

        return jsonify({"user": user.to_dict()})


class UsersFavoritesListResource(Resource):
    def get(self, user_id):
        session = db_session.create_session()
        user = session.query(Dish).join(UserFavorites).where(UserFavorites.userId == user_id)
        return jsonify([item.to_dict() for item in user])