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>
/// Что скопировалось. <paramref name="DroppedBumperRefs"/> — врезки-заставки, для которых на канале
/// -приёмнике не нашлось блока с таким же именем: ссылка снята, врезку надо донастроить руками.
/// </summary>
public sealed record CopyTemplateResultDto(
    int Layers,
    int Slots,
    int Junctions,
    int DroppedBumperRefs
);

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