using Shared.Problems;

namespace Kbx.Shared.Integrations;

public static class KbxIntegrationProblemFactory
{
    public static KbxIntegrationProblem ToProblem(KbxIntegrationAttemptResult result) => result.FailureKind switch
    {
        KbxIntegrationFailureKind.Transient => KbxIntegrationProblem.Create(
            result.Code ?? "INTEGRATION_DELAYED",
            "외부 연계가 지연되고 있습니다.",
            retryable: true,
            detail: "시스템이 자동 재처리합니다. 동일 업무를 다시 실행하지 마세요."),
        _ => KbxIntegrationProblem.Create(
            result.Code ?? "INTEGRATION_FAILED",
            "외부 연계를 완료하지 못했습니다.",
            retryable: false,
            detail: "업무 데이터는 유지됩니다. 확인 필요 항목에서 원인과 재처리 가능 여부를 확인하세요."),
    };
}
