using System;
using System.Collections.Generic;
using System.Globalization;
using NodePipeline.Abstractions.Interfaces;
using NodePipeline.Abstractions.Interfaces.Validation;
using NodePipeline.Abstractions.Models.Validation;
using NodePipeline.Configuration.Abstractions.Models.Execute;

namespace NodePipeline.Engine.Abstractions;

/// <summary>
///     Service class for engine
/// </summary>
public interface IPipelineNodeValidator
{
    IPipelineLocalizationProvider PipelineLocalizationProvider { get; set; }

    Dictionary<Type, INodeValidator> NodeValidators { get; set; }

    Dictionary<Type, INodeFieldValidator> NodeFieldValidators { get; set; }

    NodeValidationResult ValidateNode(
        string pipelineId,
        INodeFactory nodeFactory,
        NodeConfig nodeConfig,
        List<NodeConfig> allNodes,
        Dictionary<string, object?> parameters,
        CultureInfo cultureInfo);
}