namespace SheetMe.Data.Config;
///
/// 데이터 계층 설정 — appsettings.json 바인딩 모델.
/// SaveMode 기본값은 File — 운영 레거시 테이블(E_SdgMst/E_SctMst) 쓰기는 명시적 설정 후에만 활성화된다.
///
public sealed class DataConfig
{
#region Properties
/// Oracle 접속 문자열 — 어느 원천에서도 못 찾으면 빈 문자열(파일 전용 모드)
public string ConnectionString { get; set; } = string.Empty;
///
/// 접속 정보의 출처 — "appsettings" 또는 "ServerInfo(병원라벨)". 진단·상태 표시용이며
/// 자격증명은 담지 않는다(어느 DB 에 붙었는지만 알려준다).
///
public string ConnectionSource { get; set; } = "없음";
/// 캔버스 그리드 간격(px)
public int GridSize { get; set; } = 4;
/// 정렬 가이드 스냅 임계값(px)
public int SnapThreshold { get; set; } = 6;
/// 저장 모드 — File(기본, .xml 파일) | Db(E_SdgMst/E_SctMst 저장)
public string SaveMode { get; set; } = "File";
/// 파일 모드 서식 폴더
public string XmlFolder { get; set; } = "forms";
///
/// 같은 서식을 여러 탭으로 여는 것을 허용할지 — 기본 false(레거시 AllowMultiSheetForm 기본 "N" 과 동일).
///
/// 막는 이유는 불편이 아니라 데이터 손실이다. 두 탭에서 교대로 저장하면 낙관적 충돌 검출이
/// 어느 쪽에도 없어 마지막 저장이 앞선 편집을 통째로 덮는다.
/// 비교용으로 나란히 열어야 하는 경우가 있어 탈출구는 남겨 둔다.
///
public bool AllowMultiSheetForm { get; set; }
///
/// 개발용 HIS 사용자 코드 — 기동 인자 없이 실행할 때만 시도하는 폴백.
/// 운영 배포본의 appsettings.json 에는 이 키가 없으므로 자동으로 비활성이다.
/// 여기 담는 것은 설정값(UidCod 문자열)뿐이며, 해석된 사용자 정보는 담지 않는다.
///
public string DevUidCod { get; set; } = string.Empty;
///
/// 싸인·직인 이미지의 서버 경로 → UNC 공유 대응 — "서버접두=UNC접두" 목록.
/// 예: D:\MsystechHIS=\\192.168.100.222\MsystechHIS
///
/// 왜 설정인가. DB 는 이미지 위치를 파일서버의 로컬 절대경로로 들고 있고
/// (실측: D:\MsystechHIS\{사이트}\…), 레거시는 그 경로를 ActiveX OCX 데몬
/// (기본 포트 2002)에 넘겨 받아 온다. 그 프로토콜은 재현할 수 없으므로 우리는 같은 파일을
/// 공유 폴더로 직접 읽는다 — 접두 대응은 병원마다 다르니 코드가 아니라 설정이다.
///
/// 비어 있으면(기본) 매핑을 시도하지 않는다 — 지금까지와 같이 로컬 캐시만 본다.
/// 자격증명은 담지 않는다: 공유 접근 권한은 단말 로그인 계정으로 해결한다.
///
public string[] SignatureShareMap { get; set; } = Array.Empty();
#endregion
#region Methods
/// DB 저장 모드 여부
public bool IsDbSaveMode()
=> string.Equals(SaveMode, "Db", StringComparison.OrdinalIgnoreCase);
#endregion
}