using System.Globalization;
namespace Infrastructure.StockData;
///
/// SEIBro getShotnByMart(시장별 단축코드 조회) 응답 파서 — 순수 C#. "SEIBro 발행회사번호 부트스트랩" (Wave 0).
/// 입력: 공용 SeibroXml envelope. 행 필드: SHOTN_ISIN(단축코드) / KOR_SECN_NM(종목명) / ISSUCO_CUSTNO(발행회사번호).
/// 세 필드 중 하나라도 없거나 회사번호가 비숫자인 행은 건너뛴다 (매핑 불가 행 — upsert 자연키가 성립하지 않음).
///
public static class SeibroShotnByMartParser
{
/// 시장별 단축코드 1행
public sealed record Row(string ShortCode, string Name, int IssucoCustno);
public static IReadOnlyList Parse(SeibroXml.Envelope envelope)
{
var rows = new List();
foreach (var fields in envelope.Rows)
{
var shortCode = SeibroXml.GetOrNull(fields, "SHOTN_ISIN")?.Trim();
var name = SeibroXml.GetOrNull(fields, "KOR_SECN_NM")?.Trim();
var custnoRaw = SeibroXml.GetOrNull(fields, "ISSUCO_CUSTNO");
if (string.IsNullOrEmpty(shortCode) || string.IsNullOrEmpty(name) || !int.TryParse(custnoRaw, NumberStyles.Integer, CultureInfo.InvariantCulture, out var custno))
{
continue;
}
rows.Add(new Row(shortCode, name, custno));
}
return rows;
}
}