// ===== Teuanjai Radio — data + helpers =====

// รหัสสาขา 3 หลัก -> ชื่อสาขา
const MEMBERS = {
  "000": "สำนักงานใหญ่",
  "001": "สาขาบ้านส้อง",
  "002": "สาขาพระแสง",
  "006": "สาขาชัยบุรี",
  "009": "สาขาเกาะลันตา",
  "013": "สาขาคลองท่อม",
  "014": "สาขาเคียนซา",
  "016": "สาขาโคกกลอย",
  "017": "สาขาเขาปีบ",
  "020": "สาขาหนองนิล",
  "021": "สาขาพิปูน",
  "022": "สาขาบางสวรรค์",
  "023": "สาขาพังงา",
  "025": "สาขาวค.สุราษฏร์",
  "026": "สาขาเขาพนม",
  "027": "สาขาทับใหม่",
  "028": "สาขาคีรีรัฐนิคม",
  "029": "สาขาควนสามัคคี",
  "030": "สาขาทุ่งใหญ่",
  "031": "สาขาบ้านนาเดิม",
  "032": "สาขาคลองพน",
  "033": "สาขาเสวียด",
  "034": "สาขาสิเกา",
  "036": "สาขาชะอวด",
  "037": "สาขาขนอม",
  "038": "สาขาควนขนุน",
  "039": "สาขาสิชล",
  "040": "สาขาทำเนียบ",
  "041": "สาขาการุณราษฎร์",
  "042": "สาขาโคกบก",
  "043": "สาขาป่าพะยอม",
  "045": "สาขาอำเภอเมืองกระบี่",
  "046": "สาขาทุ่งเตา",
  "047": "สาขาพรุดินนา",
  "048": "สาขาฉวาง",
  "049": "สาขาลำทับใหม่",
  "050": "สาขาทุ่งยาว",
  "051": "สาขาคลองยาง",
  "052": "สาขาแม่ขรี",
  "053": "สาขาต้นโพธิ์",
  "054": "สาขาท่าชนะ",
  "055": "สาขาไชยา",
  "056": "สาขามะนาวหวาน",
  "057": "สาขาห้วยยอด",
  "058": "สาขาพรหมคีรี",
  "059": "สาขาลานสกา",
  "060": "สาขาท่าชี",
  "061": "สาขาทรายขาว",
  "062": "สาขาบ่อล้อ",
  "063": "สาขากงตาก",
  "064": "สาขาท้ายเหมือง",
  "065": "สาขานบพิตำ",
  "066": "สาขาทับละมุ",
  "067": "สาขาปลายพระยา",
  "068": "สาขาเหนือคลอง",
  "069": "สาขานาบอน",
  "070": "สาขาพระแสง2",
  "071": "สาขาเขาวิเศษ",
  "072": "สาขาท่าทองใหม่",
  "073": "สาขาวิภาวดี",
  "074": "สาขาจันดี",
  "075": "สาขาเขาทะลุ",
  "076": "สาขาบางขัน",
  "077": "สาขาหนองทะเล",
  "078": "สาขากะปาง",
  "079": "สาขาแยกปฐมพร",
  "080": "สาขาคลองสงค์",
  "081": "สาขาซีเฟรช",
  "082": "สาขาไสไทย",
  "083": "สาขาหนองดี",
  "084": "สาขาถ้ำพรรณรา",
  "085": "สาขาเกาะลันตา2",
  "086": "สาขาคลองเขม้า",
  "087": "สาขาย่านตาขาว",
  "088": "สาขาในลึก",
  "090": "สาขาต้นเหรียง",
  "101": "สาขาท่าศาลา",
  "102": "สาขาควนมะพร้าว",
  "103": "สาขาหนองขรี",
  "106": "สาขาสมุยตลาดสีฟ้า",
  "107": "สาขาตะกั่วป่า",
  "108": "สาขาสมุย2แม่น้ำ",
  "110": "สาขาปากพยูน",
  "111": "สาขาคุระบุรี",
  "112": "สาขาสะทิงพระ",
  "113": "สาขาขนอม2",
  "114": "สาขาระโนด",
  "115": "สาขาบายพาสพัทลุง",
  "116": "สาขาสิชล2",
  "117": "สาขาโมถ่าย",
  "118": "สาขามาบอำมฤต",
  "119": "สาขาสิงหนคร",
  "120": "สาขาปากน้ำปราณ",
  "121": "สาขาราไวย์",
  "122": "สาขาบางสะพานน้อย",
  "123": "สาขาบางสะพาน",
  "124": "สาขาทะเลน้อย",
  "125": "สาขาท่าแซะ",
  "126": "สาขาสมุย3 ละไม",
  "128": "สาขานาเมืองเพชร",
  "129": "สาขาท่าฉาง",
  "130": "สาขาบางสวรรค์2",
  "131": "สาขาสมุย 4 ลิปะใหญ่",
  "132": "สาขาบ้านใน",
  "133": "สาขาระนอง",
  "134": "สาขาหัวไทร",
  "135": "สาขาหลังสวน",
  "136": "สาขาปากพนัง",
  "137": "สาขาตลาดวาสนา",
  "138": "สาขาบ้านกรูดใหม่",
  "139": "สาขาเขาขาว",
  "140": "สาขาดอนสัก",
  "141": "สาขาควนนิยม",
  "142": "สาขาไม้หลา",
  "143": "สาขาทุ่งมะพร้าว",
  "144": "สาขาทุ่งตะโก",
  "145": "สาขาสวี",
  "147": "สาขาในยาง",
  "148": "สาขาละงู",
  "149": "สาขาเกาะสิเหร่",
  "150": "สาขาลำภูรา",
  "151": "สาขาคลองมวน",
  "152": "สาขาบ้านตาขุน",
  "153": "สาขาอ่าวลึกใต้",
  "154": "สาขาวังตะกอ",
  "155": "สาขาร่อนพิบูลย์",
  "157": "สาขากรุงชิง",
  "158": "สาขาบ้านบ่อ",
  "159": "สาขาศรีบรรพต",
  "160": "สาขาปากน้ำหลังสวน",
  "161": "สาขาโกเตง",
  "162": "สาขาโพหัก",
  "163": "สาขาท่าข้าม",
  "164": "สาขามิตรภาพระนอง",
  "165": "สาขามะนัง",
  "166": "สาขาดอนกรวย",
  "167": "สาขาหน้าทับ",
  "168": "สาขาวัดโคก",
  "169": "สาขาบางแพ",
  "170": "สาขาควนเนียง",
  "171": "สาขาคึกคัก",
  "172": "สาขาท่าสะอ้าน",
  "173": "สาขาวัดเพลง",
  "174": "สาขาทุ่งตำเสา",
  "175": "สาขาร่อนทอง",
  "176": "สาขากองบิน56",
  "177": "สาขาทุ่งลุง",
  "178": "สาขาบ้านไร่ชาวเหนือ",
  "179": "สาขาที่วัง",
  "180": "สาขาเมืองพัทลุง",
  "181": "สาขาห้วยตะโก",
  "182": "สาขานาทวี",
  "183": "สาขาคลองแห้ง",
  "185": "สาขากุยบุรี",
  "186": "สาขาบ้านปริก",
  "187": "สาขาท่าทราย",
  "188": "สาขาคูเต่า",
  "189": "สาขาบางโรง",
  "190": "สาขาสวนหลวง(สค-4)",
  "191": "สาขาทับสะแก(ปข-5)",
  "192": "สาขาปราณบุรี(ปข-6)",
  "193": "สาขานาสาร(สฎ-39)",
  "194": "สาขาวัดเทพ(ภก-5)",
  "195": "สาขาหัวหิน102(ปข-8)",
  "196": "สาขาบางรักษ์สมุย(สฎ-40)",
  "197": "สาขาอ่าวนาง (กบ-18)",
  "198": "สาขาศรีนครินทร์ (พท-10)",
  "199": "สาขาบ้านกลาย (นศ-32)",
  "200": "สาขาโคกเมา (สข-12)",
  "201": "สาขาโพไร่หวาน (พบ-1)",
  "202": "สาขาบ้านแหลม(พบ-2)",
  "203": "สาขาบ้านคลองเตย (สข-13)",
  "204": "สาขาทุ่งสง (นศ-33)",
  "206": "สาขาโคกหนามแท่ง (สบ-1)",
  "207": "สาขาดอนยายหอม (นฐ-2)",
  "208": "สาขาหัวถนนสมุย (สฎ-41)",
  "209": "สาขาศรีธรรมโศก (นศ-34)",
  "210": "สาขาลัคกี้-ตลาดล่าง (สฎ-001)",
  "211": "สาขาเกาะหลัก (ปข-9)",
  "212": "สาขาสมอโพรง (ปข-10)",
  "214": "สาขาสี่แยกวัดโหนด (นศ-35)",
  "215": "สาขาซอย1 วค.สุราษฎร์ (สฎ-42)",
  "216": "สาขาเลียบทางรถไฟ (อย-2)",
  "217": "สาขาช่องสะแก (พบ-3)",
  "218": "สาขามวกเหล็ก (สบ2)",
  "219": "สาขาเสนา (อย-3)",
  "220": "สาขาไร่ขิง (นฐ-3)",
  "221": "สาขาโกรกกราก (สค-5)",
  "222": "สาขาดอนหว้า (ชพ-13)",
  "223": "สาขาอ่างทอง (ชพ-14)",
  "224": "สาขาหนองปลาหมอ (สบ-3)",
  "225": "สาขาลำโพ (นบ-1)",
  "226": "สาขารพ.เกษมราษ (สบ-4)",
  "227": "สาขาห้วยทราย (สบ-5)",
  "228": "สาขาห้วยปริก (นศ-36)",
  "229": "สาขามอ.สุราษฎร์ (สฎ-43)",
  "231": "สาขาบ้านพอน (ภก-6)",
  "232": "สาขาสนามบินสมุย (สฎ-44)",
  "233": "สาขาบ้านหิน (นศ-37)",
  "234": "สาขาตลาดโรงสี (อย-4)",
  "235": "สาขาเกาะลันตา 3 (กบ-19)",
  "236": "สาขาดอนตะโก (รบ-6)",
  "237": "สาขาปะทิว (ชพ-15)",
  "238": "สาขาภูธร 8 (สฎ-45)",
};

function memberFromCode(code) {
  if (MEMBERS[code]) return MEMBERS[code];
  return "สาขารหัส " + code;
}

// คลื่นถ่ายทอดสด — Live stream จริง (ฟังได้ตลอดวัน ไม่มีระยะเวลา)
const TRACKS = [
  { id: "t1", title: "ถ่ายทอดสดเสียงตามสาย", artist: "เตือนใจ", live: true, sec: 0, tag: "Live",
    src: "/stream", g: ["#7FC8E8", "#A6E3D7"] },
];

function trackById(id) {
  return TRACKS.find((t) => t.id === id) || null;
}

// ===== time formatting =====
function pad2(n) { return String(n).padStart(2, "0"); }

// ms -> "M:SS" หรือ "H:MM:SS"
function fmtClock(ms) {
  const total = Math.max(0, Math.floor(ms / 1000));
  const h = Math.floor(total / 3600);
  const m = Math.floor((total % 3600) / 60);
  const s = total % 60;
  if (h > 0) return h + ":" + pad2(m) + ":" + pad2(s);
  return m + ":" + pad2(s);
}

// ms -> "0 ชม 12 นาที 30 วิ" (อ่านง่าย)
function fmtThaiDuration(ms) {
  const total = Math.max(0, Math.floor(ms / 1000));
  const h = Math.floor(total / 3600);
  const m = Math.floor((total % 3600) / 60);
  const s = total % 60;
  const parts = [];
  if (h > 0) parts.push(h + " ชม");
  if (m > 0 || h > 0) parts.push(m + " นาที");
  parts.push(s + " วิ");
  return parts.join(" ");
}

// timestamp -> "08 มิ.ย. 2569 · 14:32:05"
const THAI_MONTHS = ["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."];
function fmtThaiDateTime(ts) {
  if (!ts) return "—";
  const d = new Date(ts);
  const date = pad2(d.getDate()) + " " + THAI_MONTHS[d.getMonth()] + " " + (d.getFullYear() + 543);
  const time = pad2(d.getHours()) + ":" + pad2(d.getMinutes()) + ":" + pad2(d.getSeconds());
  return date + " · " + time;
}
function fmtTimeOnly(ts) {
  if (!ts) return "—";
  const d = new Date(ts);
  return pad2(d.getHours()) + ":" + pad2(d.getMinutes()) + ":" + pad2(d.getSeconds());
}

// คำทักทายตามช่วงเวลา
function greetingThai(ts) {
  const h = new Date(ts || Date.now()).getHours();
  if (h >= 5 && h < 11)  return { text: "สวัสดีตอนเช้า",   icon: "sun" };
  if (h >= 11 && h < 13) return { text: "สวัสดีตอนเที่ยง", icon: "sun" };
  if (h >= 13 && h < 16) return { text: "สวัสดีตอนบ่าย",   icon: "sun" };
  if (h >= 16 && h < 19) return { text: "สวัสดีตอนเย็น",   icon: "sunset" };
  return { text: "สวัสดีตอนค่ำ", icon: "moon" };
}

// ===== persistence =====
const STORE_KEY = "teuanjai_state_v1";
function loadState() {
  try {
    const raw = localStorage.getItem(STORE_KEY);
    return raw ? JSON.parse(raw) : null;
  } catch (e) { return null; }
}
function saveState(s) {
  try { localStorage.setItem(STORE_KEY, JSON.stringify(s)); } catch (e) {}
}
function clearState() {
  try { localStorage.removeItem(STORE_KEY); } catch (e) {}
}

// ===== in-app browser detection (LINE / FB / IG ...) =====
function detectInApp() {
  const ua = (navigator.userAgent || "").toLowerCase();
  const hits = [
    ["line", "LINE"], ["fban", "Facebook"], ["fbav", "Facebook"],
    ["fb_iab", "Facebook"], ["instagram", "Instagram"],
    ["micromessenger", "WeChat"], ["tiktok", "TikTok"],
  ];
  for (const [needle, name] of hits) {
    if (ua.includes(needle)) return name;
  }
  return null;
}

Object.assign(window, {
  MEMBERS, memberFromCode, TRACKS, trackById,
  pad2, fmtClock, fmtThaiDuration, fmtThaiDateTime, fmtTimeOnly, greetingThai,
  STORE_KEY, loadState, saveState, clearState, detectInApp,
});
