using LiteCqrs;
using Microsoft.EntityFrameworkCore;
using TeleWave.Application.Common.Interfaces;
using TeleWave.Application.Common.Models;

namespace TeleWave.Application.Library.RemoveEpisode;

public sealed class RemoveEpisodeCommandHandler(IAppDbContext dbContext)
    : ICommandHandler<RemoveEpisodeCommand, Result>
{
    public async Task<Result> Handle(
        RemoveEpisodeCommand command,
        CancellationToken cancellationToken
    )
    {
        var show = await dbContext
            .Shows.Include(s => s.Episodes)
            .FirstOrDefaultAsync(s => s.Id == command.ShowId, cancellationToken);
        if (show is null)
            return Result.Failure(ShowErrors.NotFound);

        return show.RemoveEpisode(command.EpisodeId)
            ? Result.Success()
            : Result.Failure(ShowErrors.EpisodeNotFound);
    }
}
