// banks.jsx — Danh sách ngân hàng Việt Nam (nguồn: VietQR https://api.vietqr.io/v2/banks).
// Nạp SAU hdata.jsx, TRƯỚC hrm-profile.jsx.
//
// VÌ SAO NHÚNG SẴN thay vì fetch lúc mở form: app là PWA chạy được offline, và ô chọn ngân hàng
// nằm trên đường HR nhập liệu — API sập/mạng chậm mà phải chờ thì danh sách rỗng = không nhập
// được. Danh sách này mỗi năm chỉ đổi vài dòng (đổi tên/sáp nhập) nên nhúng là đủ.
//
// TỰ LÀM MỚI (vnBanksRefresh): gọi VietQR NGẦM khi mở form TK ngân hàng, tối đa 30 ngày/lần,
// KHÔNG chặn form; lỗi/offline → dùng nguyên bản nhúng. Kết quả cache ở localStorage.
// Logo: https://cdn.vietqr.io/img/<mã>.png — ảnh ngoài, tải lười; service worker tự cache
// (nhánh stale-while-revalidate) nên xem 1 lần là offline vẫn còn; lỗi ảnh → ẩn, chỉ còn chữ.
// c = mã VietQR (dùng cho logo) · s = tên gọn (GIÁ TRỊ LƯU) · n = tên đầy đủ · b = mã BIN.
const VN_BANKS_SEED = [
  { c:"ABB", s:"ABBANK", n:"Ngân hàng TMCP An Bình", b:"970425" },
  { c:"ACB", s:"ACB", n:"Ngân hàng TMCP Á Châu", b:"970416" },
  { c:"VBA", s:"Agribank", n:"Ngân hàng Nông nghiệp và Phát triển Nông thôn Việt Nam", b:"970405" },
  { c:"BAB", s:"BacABank", n:"Ngân hàng TMCP Bắc Á", b:"970409" },
  { c:"BVB", s:"BaoVietBank", n:"Ngân hàng TMCP Bảo Việt", b:"970438" },
  { c:"BIDV", s:"BIDV", n:"Ngân hàng TMCP Đầu tư và Phát triển Việt Nam", b:"970418" },
  { c:"CAKE", s:"CAKE", n:"TMCP Việt Nam Thịnh Vượng - Ngân hàng số CAKE by VPBank", b:"546034" },
  { c:"CBB", s:"CBBank", n:"Ngân hàng Thương mại TNHH MTV Xây dựng Việt Nam", b:"970444" },
  { c:"CIMB", s:"CIMB", n:"Ngân hàng TNHH MTV CIMB Việt Nam", b:"422589" },
  { c:"CITIBANK", s:"Citibank", n:"Ngân hàng Citibank, N.A. - Chi nhánh Hà Nội", b:"533948" },
  { c:"COOPBANK", s:"COOPBANK", n:"Ngân hàng Hợp tác xã Việt Nam", b:"970446" },
  { c:"DBS", s:"DBSBank", n:"DBS Bank Ltd - Chi nhánh Thành phố Hồ Chí Minh", b:"796500" },
  { c:"EIB", s:"Eximbank", n:"Ngân hàng TMCP Xuất Nhập khẩu Việt Nam", b:"970431" },
  { c:"GPB", s:"GPBank", n:"Ngân hàng Thương mại TNHH MTV Dầu Khí Toàn Cầu", b:"970408" },
  { c:"HDB", s:"HDBank", n:"Ngân hàng TMCP Phát triển Thành phố Hồ Chí Minh", b:"970437" },
  { c:"HLBVN", s:"HongLeong", n:"Ngân hàng TNHH MTV Hong Leong Việt Nam", b:"970442" },
  { c:"HSBC", s:"HSBC", n:"Ngân hàng TNHH MTV HSBC (Việt Nam)", b:"458761" },
  { c:"IBK - HCM", s:"IBKHCM", n:"Ngân hàng Công nghiệp Hàn Quốc - Chi nhánh TP. Hồ Chí Minh", b:"970456" },
  { c:"IBK - HN", s:"IBKHN", n:"Ngân hàng Công nghiệp Hàn Quốc - Chi nhánh Hà Nội", b:"970455" },
  { c:"IVB", s:"IndovinaBank", n:"Ngân hàng TNHH Indovina", b:"970434" },
  { c:"KBank", s:"KBank", n:"Ngân hàng Đại chúng TNHH Kasikornbank", b:"668888" },
  { c:"KEBHANAHCM", s:"KEBHanaHCM", n:"Ngân hàng KEB Hana – Chi nhánh Thành phố Hồ Chí Minh", b:"970466" },
  { c:"KEBHANAHN", s:"KEBHANAHN", n:"Ngân hàng KEB Hana – Chi nhánh Hà Nội", b:"970467" },
  { c:"KLB", s:"KienLongBank", n:"Ngân hàng TMCP Kiên Long", b:"970452" },
  { c:"KBHCM", s:"KookminHCM", n:"Ngân hàng Kookmin - Chi nhánh Thành phố Hồ Chí Minh", b:"970463" },
  { c:"KBHN", s:"KookminHN", n:"Ngân hàng Kookmin - Chi nhánh Hà Nội", b:"970462" },
  { c:"LPB", s:"LPBank", n:"Ngân hàng TMCP Lộc Phát Việt Nam", b:"970449" },
  { c:"MAFC", s:"MAFC", n:"Công ty Tài chính TNHH MTV Mirae Asset (Việt Nam) ", b:"977777" },
  { c:"MB", s:"MBBank", n:"Ngân hàng TMCP Quân đội", b:"970422" },
  { c:"MBV", s:"MBV", n:"Ngân hàng TNHH MTV Việt Nam Hiện Đại", b:"970414" },
  { c:"momo", s:"MoMo", n:"CTCP Dịch Vụ Di Động Trực Tuyến", b:"971025" },
  { c:"MSB", s:"MSB", n:"Ngân hàng TMCP Hàng Hải Việt Nam", b:"970426" },
  { c:"NAB", s:"NamABank", n:"Ngân hàng TMCP Nam Á", b:"970428" },
  { c:"NCB", s:"NCB", n:"Ngân hàng TMCP Quốc Dân", b:"970419" },
  { c:"NHB HN", s:"Nonghyup", n:"Ngân hàng Nonghyup - Chi nhánh Hà Nội", b:"801011" },
  { c:"OCB", s:"OCB", n:"Ngân hàng TMCP Phương Đông", b:"970448" },
  { c:"PGB", s:"PGBank", n:"Ngân hàng TMCP Thịnh vượng và Phát triển", b:"970430" },
  { c:"PBVN", s:"PublicBank", n:"Ngân hàng TNHH MTV Public Việt Nam", b:"970439" },
  { c:"PVCB", s:"PVcomBank", n:"Ngân hàng TMCP Đại Chúng Việt Nam", b:"970412" },
  { c:"PVDB", s:"PVcomBank Pay", n:"Ngân hàng TMCP Đại Chúng Việt Nam Ngân hàng số", b:"971133" },
  { c:"STB", s:"Sacombank", n:"Ngân hàng TMCP Sài Gòn Thương Tín", b:"970403" },
  { c:"SGICB", s:"SaigonBank", n:"Ngân hàng TMCP Sài Gòn Công Thương", b:"970400" },
  { c:"SCB", s:"SCB", n:"Ngân hàng TMCP Sài Gòn", b:"970429" },
  { c:"SEAB", s:"SeABank", n:"Ngân hàng TMCP Đông Nam Á", b:"970440" },
  { c:"SHB", s:"SHB", n:"Ngân hàng TMCP Sài Gòn - Hà Nội", b:"970443" },
  { c:"SHBVN", s:"ShinhanBank", n:"Ngân hàng TNHH MTV Shinhan Việt Nam", b:"970424" },
  { c:"SCVN", s:"StandardChartered", n:"Ngân hàng TNHH MTV Standard Chartered Bank Việt Nam", b:"970410" },
  { c:"TCB", s:"Techcombank", n:"Ngân hàng TMCP Kỹ thương Việt Nam", b:"970407" },
  { c:"TIMO", s:"Timo", n:"Ngân hàng số Timo by Ban Viet Bank (Timo by Ban Viet Bank)", b:"963388" },
  { c:"TPB", s:"TPBank", n:"Ngân hàng TMCP Tiên Phong", b:"970423" },
  { c:"Ubank", s:"Ubank", n:"TMCP Việt Nam Thịnh Vượng - Ngân hàng số Ubank by VPBank", b:"546035" },
  { c:"UOB", s:"UnitedOverseas", n:"Ngân hàng United Overseas - Chi nhánh TP. Hồ Chí Minh", b:"970458" },
  { c:"VBSP", s:"VBSP", n:"Ngân hàng Chính sách Xã hội", b:"999888" },
  { c:"VIB", s:"VIB", n:"Ngân hàng TMCP Quốc tế Việt Nam", b:"970441" },
  { c:"VAB", s:"VietABank", n:"Ngân hàng TMCP Việt Á", b:"970427" },
  { c:"VIETBANK", s:"VietBank", n:"Ngân hàng TMCP Việt Nam Thương Tín", b:"970433" },
  { c:"VCCB", s:"VietCapitalBank", n:"Ngân hàng TMCP Bản Việt", b:"970454" },
  { c:"VCB", s:"Vietcombank", n:"Ngân hàng TMCP Ngoại Thương Việt Nam", b:"970436" },
  { c:"ICB", s:"VietinBank", n:"Ngân hàng TMCP Công thương Việt Nam", b:"970415" },
  { c:"VTLMONEY", s:"ViettelMoney", n:"Tổng Công ty Dịch vụ số Viettel - Chi nhánh tập đoàn công nghiệp viễn thông Quân Đội", b:"971005" },
  { c:"Vikki", s:"Vikki", n:"Ngân hàng TNHH MTV Số Vikki", b:"970406" },
  { c:"VNPTMONEY", s:"VNPTMoney", n:"VNPT Money", b:"971011" },
  { c:"VPB", s:"VPBank", n:"Ngân hàng TMCP Việt Nam Thịnh Vượng", b:"970432" },
  { c:"VRB", s:"VRB", n:"Ngân hàng Liên doanh Việt - Nga", b:"970421" },
  { c:"WVN", s:"Woori", n:"Ngân hàng TNHH MTV Woori Việt Nam", b:"970457" },
];
const VN_BANKS_KEY = 'swo-portal-vnbanks';          // trùng prefix localStorage của usePersist
const VN_BANKS_TTL = 30 * 86400000;                  // 30 ngày
const VN_BANK_LOGO = (code) => 'https://cdn.vietqr.io/img/' + code + '.png';
// Danh sách ĐANG dùng: bản làm mới (nếu có) > bản nhúng.
function vnBanks(){
  try {
    const v = JSON.parse(localStorage.getItem(VN_BANKS_KEY));
    if (v && Array.isArray(v.list) && v.list.length) return v.list;
  } catch (e) {}
  return VN_BANKS_SEED;
}
// Tra theo tên gọn — chuẩn hóa NFC cả 2 vế: tên lưu trong DB có thể do người gõ/dán (NFC) trong khi
// dữ liệu API là NFD; nhìn giống hệt nhau mà so chuỗi lại lệch.
function vnBankBy(shortName){
  const v = String(shortName || '').trim().normalize('NFC').toLowerCase();
  return vnBanks().find(x => String(x.s).normalize('NFC').toLowerCase() === v) || null;
}
// Làm mới ngầm — trả về danh sách mới hoặc null (không throw: lỗi mạng là chuyện thường).
async function vnBanksRefresh(){
  try {
    const raw = JSON.parse(localStorage.getItem(VN_BANKS_KEY) || 'null');
    if (raw && raw.at && Date.now() - raw.at < VN_BANKS_TTL) return null;   // còn hạn → khỏi gọi
    const r = await fetch('https://api.vietqr.io/v2/banks', { cache:'no-store' });
    const j = await r.json();
    if (!j || !Array.isArray(j.data) || j.data.length < 30) return null;    // trả về lạ → giữ bản cũ
    // VietQR trả tên tiếng Việt ở dạng TỔ HỢP (NFD) — nhìn y hệt nhưng so chuỗi với bản nhúng
    // (NFC) sẽ ra false → chuẩn hóa NFC ngay tại nguồn cho khớp mọi phép so sánh sau này.
    const N = (x) => String(x || '').normalize('NFC');
    const list = j.data.map(x => ({ c:N(x.code), s:N(x.shortName), n:N(x.name), b:x.bin }))
      .filter(x => x.c && x.s).sort((a, b2) => a.s.toLowerCase() < b2.s.toLowerCase() ? -1 : 1);
    localStorage.setItem(VN_BANKS_KEY, JSON.stringify({ at:Date.now(), list }));
    return list;
  } catch (e) { return null; }
}
Object.assign(window, { VN_BANKS_SEED, VN_BANK_LOGO, vnBanks, vnBankBy, vnBanksRefresh });
