using AGVNavigationCore.Models;
namespace AGVNavigationCore.PathFinding.Validation
{
///
/// 도킹 검증 결과
///
public class DockingValidationResult
{
///
/// 도킹 검증이 필요한지 여부 (목적지가 도킹 대상인 경우)
///
public bool IsValidationRequired { get; set; }
///
/// 도킹 검증 통과 여부
///
public bool IsValid { get; set; }
///
/// 목적지 노드 ID
///
public string TargetNodeId { get; set; }
///
/// 목적지 노드 타입
///
public NodeType TargetNodeType { get; set; }
///
/// 필요한 도킹 방향
///
public AgvDirection RequiredDockingDirection { get; set; }
///
/// 계산된 경로의 마지막 방향
///
public AgvDirection CalculatedFinalDirection { get; set; }
///
/// 검증 오류 메시지 (실패시)
///
public string ValidationError { get; set; }
///
/// 기본 생성자
///
public DockingValidationResult()
{
IsValidationRequired = false;
IsValid = true;
TargetNodeId = string.Empty;
RequiredDockingDirection = AgvDirection.Forward;
CalculatedFinalDirection = AgvDirection.Forward;
ValidationError = string.Empty;
}
///
/// 검증 불필요한 경우 생성
///
public static DockingValidationResult CreateNotRequired()
{
return new DockingValidationResult
{
IsValidationRequired = false,
IsValid = true
};
}
///
/// 검증 성공 결과 생성
///
public static DockingValidationResult CreateValid(string targetNodeId, NodeType nodeType, AgvDirection requiredDirection, AgvDirection calculatedDirection)
{
return new DockingValidationResult
{
IsValidationRequired = true,
IsValid = true,
TargetNodeId = targetNodeId,
TargetNodeType = nodeType,
RequiredDockingDirection = requiredDirection,
CalculatedFinalDirection = calculatedDirection
};
}
///
/// 검증 실패 결과 생성
///
public static DockingValidationResult CreateInvalid(string targetNodeId, NodeType nodeType, AgvDirection requiredDirection, AgvDirection calculatedDirection, string error)
{
return new DockingValidationResult
{
IsValidationRequired = true,
IsValid = false,
TargetNodeId = targetNodeId,
TargetNodeType = nodeType,
RequiredDockingDirection = requiredDirection,
CalculatedFinalDirection = calculatedDirection,
ValidationError = error
};
}
}
}