using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using RR3CommunityServer.Data;
using static RR3CommunityServer.Data.RR3DbContext;

namespace RR3CommunityServer.Pages;

public class CatalogModel : PageModel
{
    private readonly RR3DbContext _context;

    public CatalogModel(RR3DbContext context)
    {
        _context = context;
    }

    public List<CatalogItem> CatalogItems { get; set; } = new();

    public async Task OnGetAsync()
    {
        CatalogItems = await _context.CatalogItems
            .OrderBy(c => c.Type)
            .ThenBy(c => c.Name)
            .ToListAsync();
    }

    public async Task<IActionResult> OnPostAddAsync(string sku, string name, string type, decimal price, bool available)
    {
        var item = new CatalogItem
        {
            Sku = sku,
            Name = name,
            Type = type,
            Price = price,
            Available = available
        };

        _context.CatalogItems.Add(item);
        await _context.SaveChangesAsync();

        return RedirectToPage();
    }

    public async Task<IActionResult> OnPostUpdateAsync(int itemId, string sku, string name, string type, decimal price, bool available)
    {
        var item = await _context.CatalogItems.FindAsync(itemId);
        if (item != null)
        {
            item.Sku = sku;
            item.Name = name;
            item.Type = type;
            item.Price = price;
            item.Available = available;
            await _context.SaveChangesAsync();
        }

        return RedirectToPage();
    }

    public async Task<IActionResult> OnPostToggleAvailabilityAsync(int itemId)
    {
        var item = await _context.CatalogItems.FindAsync(itemId);
        if (item != null)
        {
            item.Available = !item.Available;
            await _context.SaveChangesAsync();
        }

        return RedirectToPage();
    }

    public async Task<IActionResult> OnPostDeleteAsync(int itemId)
    {
        var item = await _context.CatalogItems.FindAsync(itemId);
        if (item != null)
        {
            _context.CatalogItems.Remove(item);
            await _context.SaveChangesAsync();
        }

        return RedirectToPage();
    }
}
