﻿using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using KernelRecordsMVC.Data;

namespace KernelRecordsMVC.Controllers;

public class ReleaseController : Controller
{
    private readonly KernelRecordsContext _context;

    public ReleaseController(KernelRecordsContext context)
    {
        _context = context;
    }

    // UC003 - Browse Releases
    public IActionResult Index(string? search, string? genre)
    {
        var query = _context.Releases
            .Include(r => r.Products)
            .Include(r => r.ReleaseArtists)
            .ThenInclude(ra => ra.Artist)
            .AsQueryable();

        if (!string.IsNullOrWhiteSpace(search))
        {
            query = query.Where(r =>
                r.Title.ToLower().Contains(search.ToLower()));
        }

        if (!string.IsNullOrWhiteSpace(genre))
        {
            query = query.Where(r =>
                r.Genre.ToLower() == genre.ToLower());
        }

        var releases = query
            .OrderBy(r => r.Title)
            .ToList();

        ViewBag.Search = search;
        ViewBag.Genre = genre;

        ViewBag.Genres = _context.Releases
            .Select(r => r.Genre)
            .Distinct()
            .OrderBy(g => g)
            .ToList();

        return View(releases);
    }


    // Release details
    public IActionResult Details(long id)
    {
        var release = _context.Releases
            .Include(r => r.Products)
            .Include(r => r.ReleaseArtists)
            .ThenInclude(ra => ra.Artist)
            .Include(r => r.Album)
            .ThenInclude(a => a!.AlbumSongs)
            .ThenInclude(x => x.Song)
            .Include(r => r.SingleRelease)
            .ThenInclude(s => s!.SingleFeatures)
            .ThenInclude(x => x.Song)
            .FirstOrDefault(r => r.ReleaseId == id);

        if (release == null)
            return NotFound();

        return View(release);
    }
}