using API.Models.RecipeModels;
using API.Models.ShoppingListModels;
using API.Models.UserModels;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

namespace API.DBAccess
{
    public class ShoppingListDBAccess
    {
        private readonly DBContext _context;

        public ShoppingListDBAccess(DBContext context)
        {
            _context = context;
        }

        // Read the shoppinglist connected to the user
        public async Task<User> ReadShoppingList(int userId)
        {
            var user = await _context.Users.Include(u => u.ShoppingList).FirstOrDefaultAsync(u => u.Id == userId);

            return user;
        }

        // Updates the shoppinglist
        public async Task<IActionResult> UpdateShoppingList(User user)
        {
            _context.Entry(user).State = EntityState.Modified;

            bool saved = await _context.SaveChangesAsync() >= 1;

            if (saved) { return new OkObjectResult(true); }

            return new ConflictObjectResult(new { message = "Could not save to database" });
        }

        // Adds an item to the shoppinglist
        public async Task<bool> AddItemToShoppingList(User user)
        {
            _context.Entry(user).State = EntityState.Modified;

            bool saved = await _context.SaveChangesAsync() >= 1;

            if (saved) { return true; }

            return false;
        }

        public async Task<IActionResult> DeleteItemFromShoppinglist(ShoppingListItem item)
        {
            _context.ShoppingList.Remove(item);
            bool saved = await _context.SaveChangesAsync() >= 0;

            if (saved) { return new OkObjectResult(saved); }

            return new ConflictObjectResult(new { message = "Could not save to database" });
        }
    }
}