using FluentValidation;
using LiteCqrs;
using TeleWave.Application.Common.Models;

namespace TeleWave.Application.Programming.Templates.CopyTemplate;

/// <summary>
/// Копирует сетку канала на другой канал: слои, слоты и правила. Группы, стыки и заставки
/// не копируются — они общие для всех каналов, копия ссылается на те же. Прежний шаблон
/// канала-приёмника заменяется целиком.
/// </summary>
public sealed record CopyTemplateCommand(Guid SourceChannelId, Guid TargetChannelId)
    : ICommand<Result<CopyTemplateResultDto>>;

/// <summary>Что скопировалось.</summary>
public sealed record CopyTemplateResultDto(int Layers, int Slots);

public sealed class CopyTemplateCommandValidator : AbstractValidator<CopyTemplateCommand>
{
    public CopyTemplateCommandValidator() =>
        RuleFor(x => x.TargetChannelId)
            .NotEqual(x => x.SourceChannelId)
            .WithMessage("Копировать сетку саму на себя бессмысленно.");
}
