namespace SheetMe.Designer.Services;
/// HIS 기동 인자 — 레거시 규약 "UidCod,ComNum,ShtCod" (콤마 구분 단일 argv)
/// HIS 사용자 코드 — 감사 컬럼의 출처
/// 내원번호 — 레거시에서도 선언·대입만 있고 사용처가 없는 죽은 인자. 형상 보존용
/// 기동 시 자동으로 열 서식 코드
/// 원문 — 단일 인스턴스 포워딩에 그대로 전달
public sealed record HisLaunch(string UidCod, int? ComNum, string ShtCod, string Raw);
///
/// 기동 인자 파싱. 레거시 frmSheetDesigner.vb:877 의 관용 파싱
/// ((Command() & "".PadRight(10, ",")).Split(","))을 이식했다 —
/// 필드가 모자라도 인덱스가 보장되므로 인자 형상이 변해도 깨지지 않는다.
///
public static class StartupArguments
{
#region Methods
/// 진단 플래그 기동인지 — 첫 인자가 "--" 로 시작
///
/// 이번 실행이 진단 모드인가. App 이 기동 때 한 번 정하고, 화면 쪽에서 읽는다.
///
/// 화면이 이것을 봐야 하는 이유: 게이트가 MainView 를 띄울 때 Loaded 커맨드가 DB 를 치면
/// 검사 결과가 접속 상태에 따라 달라진다. 게이트는 DB 없이 같은 답을 내야 한다.
///
public static bool DiagnosticMode { get; set; }
public static bool IsDiagnostic(string[] args)
=> args.Length > 0 && args[0].StartsWith("--", StringComparison.Ordinal);
/// HIS 기동 인자 — 진단 모드이거나 인자가 없으면 null
public static HisLaunch? Parse(string[] args)
=> IsDiagnostic(args) || args.Length == 0 ? null : ParseRaw(string.Join(" ", args));
///
/// 원문 파싱 — 단일 인스턴스 포워딩 수신부와 공용.
/// ComNum 은 레거시가 CInt 로 변환하다 비숫자에서 예외를 냈지만, 죽은 값 때문에 기동이
/// 실패하면 안 되므로 여기서는 TryParse 로 관용 처리한다.
///
public static HisLaunch ParseRaw(string raw)
{
var parts = ((raw ?? string.Empty) + new string(',', 10)).Split(',');
var comNum = int.TryParse(parts[1].Trim(), out var n) ? n : (int?)null;
return new HisLaunch(parts[0].Trim(), comNum, parts[2].Trim(), raw ?? string.Empty);
}
#endregion
}