// Sample data and helpers for the garage system

const fmtMoney = (n, hideUnit) => {
  const v = (n || 0).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
  return hideUnit ? v : `${v} ฿`;
};
const fmtInt = (n) => (n || 0).toLocaleString('en-US');
const fmtDateTH = (d) => {
  // Thai-ish: 26/4/2569 (BE = +543)
  const yr = d.getFullYear() + 543;
  return `${d.getDate()}/${d.getMonth() + 1}/${yr}`;
};

const TODAY = new Date(2026, 3, 27); // Apr 27, 2026

// ------- CUSTOMERS -------
const CUSTOMERS = [
  { id: "C001", name: "คุณสมชาย ใจดี", type: "person", phone: "081-234-5678", email: "somchai@example.com", taxId: "1234567890123", vehicles: 2, balance: 1605, since: "2024-08-12" },
  { id: "C002", name: "บจก. ขนส่งรุ่งเรือง", type: "company", phone: "02-555-0142", email: "ops@rungroeng.co.th", taxId: "0105561234567", vehicles: 6, balance: 0, since: "2023-04-02" },
  { id: "C003", name: "คุณวิไล สุขสันต์", type: "person", phone: "089-112-3344", email: "wilai@example.com", taxId: "—", vehicles: 1, balance: 1605, since: "2025-01-20" },
  { id: "C004", name: "หจก. ไทยเจริญ", type: "company", phone: "02-789-0001", email: "acc@thaichareon.co.th", taxId: "0205560001234", vehicles: 3, balance: 1605, since: "2022-11-05" },
  { id: "C005", name: "คุณนพดล แสงทอง", type: "person", phone: "087-901-2233", email: "—", taxId: "—", vehicles: 1, balance: 0, since: "2025-09-01" },
  { id: "C006", name: "คุณเอก ภูมิใจ", type: "person", phone: "081-555-7788", email: "ek@example.com", taxId: "—", vehicles: 1, balance: 0, since: "2024-02-14" },
  { id: "C007", name: "บจก. ส่งด่วน 24", type: "company", phone: "02-999-0123", email: "fleet@sd24.co.th", taxId: "0105563331234", vehicles: 12, balance: 1605, since: "2023-08-08" },
  { id: "C008", name: "คุณจิรายุ ทองคำ", type: "person", phone: "086-444-5566", email: "—", taxId: "—", vehicles: 1, balance: 0, since: "2025-03-10" },
  { id: "C009", name: "คุณอรพิน นิลรัตน์", type: "person", phone: "082-333-2211", email: "—", taxId: "—", vehicles: 1, balance: 0, since: "2024-06-15" },
  { id: "C010", name: "บจก. โลจิสติกส์ไทย", type: "company", phone: "02-111-4567", email: "—", taxId: "0105560009876", vehicles: 4, balance: 0, since: "2023-12-01" },
];

// ------- VEHICLES -------
const VEHICLES = [
  { id: "V001", custId: "C001", plate: "กข 1234", make: "Toyota", model: "Vios", year: 2020, mileage: 78400, color: "ขาว" },
  { id: "V002", custId: "C001", plate: "ขค 5678", make: "Honda", model: "City", year: 2018, mileage: 124000, color: "เทา" },
  { id: "V003", custId: "C002", plate: "70-8842", make: "Isuzu", model: "D-Max", year: 2021, mileage: 156000, color: "ดำ" },
  { id: "V004", custId: "C003", plate: "งจ 9012", make: "Mazda", model: "2", year: 2019, mileage: 92500, color: "แดง" },
  { id: "V005", custId: "C004", plate: "ฉช 3456", make: "Toyota", model: "Hilux", year: 2022, mileage: 45000, color: "น้ำเงิน" },
  { id: "V006", custId: "C007", plate: "ฮก 7788", make: "Honda", model: "Civic", year: 2021, mileage: 67000, color: "ขาว" },
  { id: "V007", custId: "C006", plate: "พน 1199", make: "Nissan", model: "Almera", year: 2020, mileage: 88000, color: "เงิน" },
];

// ------- JOBS -------
const JOB_STATUS = {
  intake: { label: "รับรถ", color: "info" },
  waiting: { label: "รอคิว", color: "default" },
  in_bay: { label: "กำลังซ่อม", color: "warn" },
  done: { label: "ซ่อมเสร็จ", color: "ok" },
  quoted: { label: "เสนอราคา", color: "info" },
  invoiced: { label: "ออกบิล", color: "default" },
  paid: { label: "ชำระแล้ว", color: "ok" },
};

const JOBS = [
  { id: "J2604-000007", date: "2026-04-26", custId: "C007", vehId: "V006", plate: "ฮก 7788", status: "in_bay", bay: 2, tech: "T01", svc: ["BRAKE-PAD", "BRAKE-OIL"], total: 1605, started: "09:30", eta: "11:30", note: "ลูกค้ารอที่ร้าน" },
  { id: "J2604-000006", date: "2026-04-26", custId: "C001", vehId: "V001", plate: "กข 1234", status: "in_bay", bay: 1, tech: "T02", svc: ["OIL-CHG", "FILTER-O"], total: 1605, started: "10:15", eta: "11:00", note: "" },
  { id: "J2604-000005", date: "2026-04-26", custId: "C003", vehId: "V004", plate: "งจ 9012", status: "waiting", bay: null, tech: null, svc: ["INSPECT"], total: 500, started: null, eta: null, note: "นัด 13:00" },
  { id: "J2604-000004", date: "2026-04-26", custId: "C004", vehId: "V005", plate: "ฉช 3456", status: "done", bay: 3, tech: "T03", svc: ["TIRE-ROT", "WHEEL-ALIGN"], total: 700, started: "08:00", eta: "10:00", note: "รอลูกค้ามารับ" },
  { id: "J2604-000003", date: "2026-04-26", custId: "C002", vehId: "V003", plate: "70-8842", status: "quoted", bay: null, tech: null, svc: ["BELT-TIMING", "ENGINE-TUNE"], total: 5300, started: null, eta: null, note: "รอลูกค้าตอบ quote" },
  { id: "J2604-000002", date: "2026-04-26", custId: "C006", vehId: "V007", plate: "พน 1199", status: "done", bay: 4, tech: "T01", svc: ["WASH-DETAIL", "AC-SERVICE"], total: 1750, started: "08:30", eta: "10:30", note: "" },
  { id: "J2604-000001", date: "2026-04-26", custId: "C001", vehId: "V002", plate: "ขค 5678", status: "waiting", bay: null, tech: null, svc: ["OIL-CHG"], total: 350, started: null, eta: null, note: "นัด 14:30" },
];

// ------- TECHNICIANS -------
const TECHS = [
  { id: "T01", name: "สมศักดิ์", initials: "สศ", role: "ช่างซ่อม", color: "red", rate: 0.15 },
  { id: "T02", name: "ประยุทธ์", initials: "ปย", role: "ช่างซ่อม", color: "amber", rate: 0.15 },
  { id: "T03", name: "วิชัย", initials: "วช", role: "ช่างยาง/ช่วงล่าง", color: "green", rate: 0.12 },
  { id: "T04", name: "ดำรง", initials: "ดร", role: "ช่างไฟฟ้า", color: "ink", rate: 0.18 },
];

// ------- BAYS -------
const BAYS = [
  { id: 1, label: "Bay 1", type: "ทั่วไป" },
  { id: 2, label: "Bay 2", type: "ทั่วไป" },
  { id: 3, label: "Bay 3", type: "ช่วงล่าง" },
  { id: 4, label: "Bay 4", type: "ล้างรถ" },
];

// ------- INVOICES -------
const INVOICES = [
  { id: "INV2604-000006", jobId: "J2604-000007", date: "2026-04-26", custId: "C007", total: 1605, status: "finalized", paid: 0, due: "2026-05-26" },
  { id: "INV2604-000005", jobId: "J2604-000006", date: "2026-04-26", custId: "C001", total: 1605, status: "finalized", paid: 0, due: "2026-05-26" },
  { id: "INV2604-000004", jobId: "J2604-000005", date: "2026-04-26", custId: "C003", total: 1605, status: "finalized", paid: 0, due: "2026-05-26" },
  { id: "INV2604-000003", jobId: "J2604-000004", date: "2026-04-26", custId: "C004", total: 1605, status: "void", paid: 0, due: "2026-05-26" },
  { id: "INV2604-000002", jobId: "J2604-000002", date: "2026-04-26", custId: "C006", total: 1605, status: "void", paid: 0, due: "2026-05-26" },
  { id: "INV2604-000001", jobId: "J2604-000001", date: "2026-04-26", custId: "C001", total: 1605, status: "finalized", paid: 1605, due: "2026-05-26" },
];

// ------- PAYMENTS -------
const PAYMENTS = [
  { id: "PAY2604-001", date: "2026-04-26", custId: "C001", invId: "INV2604-000001", method: "cash", amount: 1605, ref: "—" },
  { id: "PAY2604-002", date: "2026-04-25", custId: "C006", invId: "INV2604-002000", method: "transfer", amount: 850, ref: "BBL-44512" },
  { id: "PAY2604-003", date: "2026-04-24", custId: "C002", invId: "INV2604-001995", method: "card", amount: 5300, ref: "VISA-****8821" },
  { id: "PAY2604-004", date: "2026-04-22", custId: "C005", invId: "INV2604-001990", method: "qr", amount: 720, ref: "PROMPTPAY" },
];

// ------- PARTS -------
const PARTS = [
  { code: "AF-HONDA", name: "กรองอากาศ Honda", brand: "Honda", unit: "pcs", cat: "กรอง", cost: 200, price: 300, stock: 24, reorder: 10 },
  { code: "AF-TOYOTA", name: "กรองอากาศ Toyota", brand: "Toyota", unit: "pcs", cat: "กรอง", cost: 180, price: 280, stock: 31, reorder: 10 },
  { code: "BAT-55B24", name: "แบตเตอรี่ 55B24L", brand: "3K", unit: "pcs", cat: "แบต", cost: 1800, price: 2500, stock: 6, reorder: 4 },
  { code: "BAT-70D23", name: "แบตเตอรี่ 70D23L", brand: "GS", unit: "pcs", cat: "แบต", cost: 2500, price: 3400, stock: 4, reorder: 4 },
  { code: "BELT-TIMING-TOYOTA", name: "สายพานราวลิ้น Toyota", brand: "Mitsuboshi", unit: "pcs", cat: "เครื่อง", cost: 900, price: 1400, stock: 8, reorder: 4 },
  { code: "BP-FRONT-SEDAN", name: "ผ้าเบรกหน้า รถเก๋งทั่วไป", brand: "Akebono", unit: "set", cat: "เบรก", cost: 700, price: 1100, stock: 18, reorder: 8 },
  { code: "BP-REAR-SEDAN", name: "ผ้าเบรกหลัง รถเก๋งทั่วไป", brand: "Akebono", unit: "set", cat: "เบรก", cost: 600, price: 950, stock: 14, reorder: 6 },
  { code: "BRAKE-FLUID", name: "น้ำมันเบรก DOT-4 500ml", brand: "Shell", unit: "pcs", cat: "เบรก", cost: 120, price: 180, stock: 45, reorder: 20 },
  { code: "COOLANT-4L", name: "น้ำยาหล่อเย็น 4 ลิตร", brand: "Shell", unit: "set", cat: "น้ำมัน", cost: 350, price: 550, stock: 12, reorder: 6 },
  { code: "OF-HONDA", name: "กรองน้ำมันเครื่อง Honda", brand: "Honda", unit: "pcs", cat: "กรอง", cost: 130, price: 200, stock: 32, reorder: 15 },
  { code: "OF-ISUZU", name: "กรองน้ำมันเครื่อง Isuzu", brand: "Isuzu", unit: "pcs", cat: "กรอง", cost: 140, price: 220, stock: 18, reorder: 10 },
  { code: "OF-TOYOTA", name: "กรองน้ำมันเครื่อง Toyota", brand: "Toyota", unit: "pcs", cat: "กรอง", cost: 120, price: 180, stock: 28, reorder: 15 },
  { code: "OIL-10W40-4L", name: "น้ำมันเครื่อง 10W-40 4 ลิตร", brand: "Shell", unit: "set", cat: "น้ำมัน", cost: 700, price: 1050, stock: 22, reorder: 10 },
  { code: "OIL-15W40-5L", name: "น้ำมันเครื่องดีเซล 15W-40 5 ลิตร", brand: "Shell", unit: "set", cat: "น้ำมัน", cost: 900, price: 1350, stock: 14, reorder: 8 },
  { code: "OIL-5W30-4L", name: "น้ำมันเครื่อง 5W-30 4 ลิตร", brand: "Shell", unit: "set", cat: "น้ำมัน", cost: 800, price: 1200, stock: 19, reorder: 10 },
  { code: "OIL-ATF", name: "น้ำมันเกียร์ออโต้ 4 ลิตร", brand: "Castrol", unit: "set", cat: "น้ำมัน", cost: 950, price: 1400, stock: 9, reorder: 6 },
  { code: "SP-DENSO", name: "หัวเทียน Denso", brand: "Denso", unit: "pcs", cat: "เครื่อง", cost: 90, price: 160, stock: 60, reorder: 30 },
  { code: "SP-NGK", name: "หัวเทียน NGK", brand: "NGK", unit: "pcs", cat: "เครื่อง", cost: 80, price: 150, stock: 48, reorder: 30 },
  { code: "TIRE-195-55-R16", name: "ยาง 195/55 R16", brand: "Michelin", unit: "pcs", cat: "ยาง", cost: 2400, price: 3200, stock: 10, reorder: 4 },
  { code: "WIPER-22", name: "ใบปัดน้ำฝน 22\"", brand: "Bosch", unit: "pcs", cat: "อุปกรณ์", cost: 280, price: 420, stock: 26, reorder: 12 },
];

// ------- SERVICES (work items) -------
const SERVICES = [
  { code: "AC-SERVICE", name_th: "ล้างแอร์", name_en: "AC service", cat: "แอร์", min: 90, price: 1500 },
  { code: "BATTERY", name_th: "เปลี่ยนแบตเตอรี่", name_en: "Battery replacement", cat: "ไฟฟ้า", min: 20, price: 200 },
  { code: "BELT-TIMING", name_th: "เปลี่ยนสายพานราวลิ้น", name_en: "Timing belt", cat: "เครื่องยนต์", min: 240, price: 3500 },
  { code: "BRAKE-OIL", name_th: "เปลี่ยนน้ำมันเบรก", name_en: "Brake fluid replacement", cat: "ช่วงล่าง", min: 30, price: 450 },
  { code: "BRAKE-PAD", name_th: "เปลี่ยนผ้าเบรกหน้า", name_en: "Front brake pads", cat: "ช่วงล่าง", min: 60, price: 800 },
  { code: "BRAKE-PAD-R", name_th: "เปลี่ยนผ้าเบรกหลัง", name_en: "Rear brake pads", cat: "ช่วงล่าง", min: 60, price: 700 },
  { code: "CLUTCH", name_th: "เปลี่ยนคลัตช์", name_en: "Clutch replacement", cat: "เกียร์", min: 360, price: 5000 },
  { code: "COOLANT", name_th: "เปลี่ยนน้ำหล่อเย็น", name_en: "Coolant flush", cat: "เครื่องยนต์", min: 45, price: 600 },
  { code: "ECU-SCAN", name_th: "สแกน ECU", name_en: "ECU scan/diagnosis", cat: "ไฟฟ้า", min: 30, price: 500 },
  { code: "ENGINE-TUNE", name_th: "ปรับจูนเครื่องยนต์", name_en: "Engine tune-up", cat: "เครื่องยนต์", min: 120, price: 1800 },
  { code: "FILTER-A", name_th: "เปลี่ยนไส้กรองอากาศ", name_en: "Air filter replacement", cat: "ทั่วไป", min: 15, price: 150 },
  { code: "FILTER-O", name_th: "เปลี่ยนไส้กรองน้ำมัน", name_en: "Oil filter replacement", cat: "ทั่วไป", min: 15, price: 100 },
  { code: "GEAR-OIL", name_th: "เปลี่ยนน้ำมันเกียร์", name_en: "Gear oil change", cat: "เกียร์", min: 45, price: 600 },
  { code: "INSPECT", name_th: "ตรวจเช็ค 25 จุด", name_en: "25-point inspection", cat: "บริการ", min: 60, price: 500 },
  { code: "OIL-CHG", name_th: "เปลี่ยนน้ำมันเครื่อง", name_en: "Engine oil change", cat: "ทั่วไป", min: 30, price: 350 },
  { code: "SPARK-PLUG", name_th: "เปลี่ยนหัวเทียน", name_en: "Spark plug replacement", cat: "เครื่องยนต์", min: 30, price: 400 },
  { code: "SUSPENSION", name_th: "ตรวจเช็คช่วงล่าง", name_en: "Suspension check", cat: "ช่วงล่าง", min: 45, price: 300 },
  { code: "TIRE-ROT", name_th: "สลับยาง", name_en: "Tire rotation", cat: "ช่วงล่าง", min: 30, price: 200 },
  { code: "WASH-DETAIL", name_th: "ล้างรถ + ดูดฝุ่น", name_en: "Wash + vacuum", cat: "บริการ", min: 45, price: 250 },
  { code: "WHEEL-ALIGN", name_th: "ตั้งศูนย์ถ่วงล้อ", name_en: "Wheel alignment", cat: "ช่วงล่าง", min: 60, price: 500 },
];

// ------- WAREHOUSES -------
const WAREHOUSES = [
  { code: "WH-MAIN", name: "คลังอะไหล่ สาขาหลัก", sku: 78, qty: 412, reserved: 18, status: "active" },
  { code: "WH-BR2", name: "คลังอะไหล่ สาขาสอง", sku: 32, qty: 144, reserved: 4, status: "active" },
];

// ------- SUPPLIERS -------
const SUPPLIERS = [
  { id: "S001", name: "บจก. อะไหล่ไทย", taxId: "0105560001111", phone: "02-111-2233", credit: 30, balance: 0 },
  { id: "S002", name: "หจก. ยนต์การ", taxId: "0205561112233", phone: "02-444-5566", credit: 15, balance: 4500 },
  { id: "S003", name: "บจก. โกลบอลพาร์ท", taxId: "0105563334455", phone: "02-888-9900", credit: 30, balance: 0 },
];

// ------- WARRANTY POLICIES -------
const WARRANTY = [
  { id: "W001", scope: "default", days: 90, kind: "both", note: "นโยบายเริ่มต้น", start: "2025-01-01", end: "—" },
  { id: "W002", scope: "BRAKE-PAD", days: 180, kind: "parts", note: "ผ้าเบรก Akebono", start: "2025-06-01", end: "—" },
  { id: "W003", scope: "BAT-55B24", days: 365, kind: "parts", note: "แบตเตอรี่ 12 เดือน", start: "2025-01-01", end: "—" },
];

// ------- KPIs -------
const KPIS = {
  todayRevenue: 9120,
  todayJobs: 7,
  inBay: 2,
  waiting: 2,
  doneToday: 2,
  monthRevenue: 286400,
  monthDelta: 0.124,
  ar: 6420,
  arOverdue: 0,
  ap: 4500,
  wip: 7,
  productivity: 0.78,
  partsAlert: 4,
};



// ------- BOSS ISSUES (รายงานปัญหาที่ต้องให้ลุงวุ้นตัดสินใจ) -------
const BOSS_ISSUES = [
  {
    id: "BI-2604-014", kind: "discount", severity: "high", status: "open", unread: true,
    created: "11:08", title: "ลูกค้าขอลด 1,500 บาท — งานเปลี่ยนช่วงล่าง",
    detail: "ลูกค้าเก่า 3 ปี (คุณวิชัย) เคยซ่อมที่นี่ 8 ครั้ง พอใจมาตลอด ครั้งนี้ยอด 12,400 ขอลดเหลือ 10,900 อ้างว่าเอารถมาซ่อมประจำ ผมไม่กล้าให้เพราะเกินอำนาจ (ลดได้แค่ 5%)",
    fromTech: "T2", custId: "C001", jobId: "J2604-000007", amount: 1500,
    options: [
      { label: "อนุมัติให้ลด 1,500", note: "ตามที่ลูกค้าขอ", cost: -1500 },
      { label: "ลดให้ 800 บาทเป็นน้ำใจ", note: "ทางสายกลาง", cost: -800 },
      { label: "ปฏิเสธ — ราคาลงไม่ได้แล้ว", note: "ราคาเป็นต้นทุน", cost: 0 },
    ],
  },
  {
    id: "BI-2604-013", kind: "warranty", severity: "high", status: "open", unread: true,
    created: "10:42", title: "ลูกค้าเคลมแบตเตอรี่ — ซื้อไป 4 เดือน",
    detail: "คุณสมศรี (ภบ-1832) เอาแบต Bosch เข้ามาเช็ค บอกว่าสตาร์ทไม่ติด ทดสอบแล้วแบตเสีย รับประกัน 1 ปี เคลมได้ แต่ก่อนหน้าผมเห็นว่าเขาจอดรถตากแดดทั้งวัน 2 อาทิตย์ ไม่แน่ใจว่าจะให้เคลมเต็มราคา หรือลดให้ครึ่ง",
    fromTech: "T1", custId: "C003", jobId: "J2604-000005", amount: 3200,
    options: [
      { label: "เคลมเต็ม — เปลี่ยนแบตใหม่ฟรี", note: "เก็บลูกค้าระยะยาว", cost: -3200 },
      { label: "เคลมครึ่ง — ลูกค้าจ่าย 1,600", note: "แบ่งความรับผิดชอบ", cost: -1600 },
      { label: "ปฏิเสธเคลม — เก็บเต็ม", note: "ให้ส่วนลด 500 แทน", cost: -500 },
    ],
  },
  {
    id: "BI-2604-012", kind: "complaint", severity: "high", status: "open", unread: true,
    created: "10:15", title: "ลูกค้าโกรธ — งานช้ากว่าสัญญา 3 ชั่วโมง",
    detail: "หจก. ไทยเจริญ (ฉช-3456) เอารถเข้ามาเช็คระยะ บอกตอนเช้าว่าเสร็จเที่ยง ตอนนี้ 10 โมงแล้วยังไม่ขึ้น hoist เลย ลูกค้ามารอครึ่งชั่วโมงแล้ว ขู่จะรีวิว 1 ดาว",
    fromTech: "T3", custId: "C004", jobId: "J2604-000004",
    options: [
      { label: "ลดราคา 30% เป็นการขอโทษ", note: "เก็บลูกค้าใหญ่", cost: -1100 },
      { label: "ของแถม — ล้างรถ + ขัดสีฟรี", note: "ต้นทุนน้อยกว่า", cost: -300 },
      { label: "ผมจะออกไปคุยเอง", note: "ลุงวุ้นออกหน้าเอง" },
    ],
  },
  {
    id: "BI-2604-011", kind: "stockout", severity: "med", status: "open", unread: false,
    created: "09:50", title: "อะไหล่ผ้าเบรกหน้าหมด — มีงาน 2 ใบที่รออยู่",
    detail: "ผ้าเบรก BP-FRONT-SEDAN (รถเก๋งทั่วไป) เหลือ 0 ชิ้น มีลูกค้า 2 ใบรออยู่ ผู้ขายส่งของได้เร็วสุดพรุ่งนี้บ่าย ค่าส่งด่วนเพิ่ม 350 บาท / ชิ้น หรือไปซื้อร้านข้าง ๆ ราคาแพงกว่า 200/ชิ้น",
    fromTech: "T2", amount: 700,
    options: [
      { label: "สั่งด่วนจาก Bosch (เช้าพรุ่งนี้)", note: "ค่าส่ง +700 บาท", cost: -700 },
      { label: "ซื้อร้านข้าง ๆ ตอนนี้เลย", note: "+400 รวม 2 ชิ้น", cost: -400 },
      { label: "เลื่อนงานลูกค้า ขอโทษ", note: "ไม่เสียต้นทุน", cost: 0 },
    ],
  },
  {
    id: "BI-2604-010", kind: "overdue", severity: "med", status: "open", unread: false,
    created: "09:20", title: "บจก. ส่งด่วน 24 ค้างชำระ 45 วัน — 18,500 บาท",
    detail: "ลูกค้าฟลีท 12 คัน ค้างใบเสร็จ 3 ใบ รวม 18,500 บาท เคยตรงเวลามาตลอด 2 ปี เพิ่งขอเครดิต 60 วันเดือนที่แล้ว ขอเข้ามาเซอร์วิสรถใหม่อีก 4 คัน ผมไม่กล้าตัดสินใจ",
    custId: "C007", amount: 18500,
    options: [
      { label: "รับงานใหม่ + เก็บเงินก่อนส่งรถ", note: "บาลานซ์ความสัมพันธ์", cost: 0 },
      { label: "บล็อก — ไม่รับจนกว่าจะจ่าย", note: "เสี่ยงเสียลูกค้า", cost: 0 },
      { label: "ผมจะโทรหาเจ้าของเอง", note: "ลุงวุ้นออกเจรจา" },
    ],
  },
  {
    id: "BI-2604-009", kind: "delay", severity: "med", status: "open", unread: false,
    created: "08:45", title: "Job J2604-000006 เลย ETA 2 ชั่วโมง — ปัญหาเครื่องเสียมากกว่าที่คิด",
    detail: "ตอนรับรถบอกว่าเป็นเสียงดังที่เครื่อง พอเปิดดูจริงเจอลูกปืนข้อเหวี่ยงสึก ต้องเปลี่ยนทั้งชุด ราคาเพิ่ม 4,800 บาท ลูกค้ายังไม่รู้ ต้องโทรขออนุมัติก่อนทำต่อ",
    fromTech: "T1", custId: "C002", jobId: "J2604-000006", amount: 4800,
    options: [
      { label: "โทรลูกค้าก่อน รอคำตอบ", note: "ปลอดภัยที่สุด" },
      { label: "ทำเลยตามแก้ไขจริง — แจ้งทีหลัง", note: "เสี่ยงโดนปฏิเสธจ่าย" },
      { label: "ทำแค่ที่จำเป็นพื้นฐาน", note: "ปลอดภัยพอใช้ — ลูกค้ามาแก้ทีหลัง" },
    ],
  },
  {
    id: "BI-2604-008", kind: "price", severity: "low", status: "open", unread: false,
    created: "08:20", title: "ลูกค้าใหม่ขอใบเสนอราคาเปลี่ยนเครื่อง — มูลค่า 85,000",
    detail: "คุณเอก (กธ-7766) มีรถ Vios ปี 2010 ขอใบเสนอราคาเปลี่ยนเครื่องใหม่ ผมประเมินไว้ 85,000 (เครื่อง 65k + แรง 20k) เกินอำนาจของผม (เปิดใบเสนอได้ไม่เกิน 30,000)",
    fromTech: "T2", custId: "C006", amount: 85000,
    options: [
      { label: "อนุมัติใบเสนอตามที่ประเมิน", note: "ราคาตลาด" },
      { label: "ลดให้ 80,000 ดึงงาน", note: "ขาด 5,000", cost: -5000 },
      { label: "เพิ่มเงื่อนไข — มัดจำ 30%", note: "ลดความเสี่ยง" },
    ],
  },
  {
    id: "BI-2604-007", kind: "approval", severity: "low", status: "open", unread: false,
    created: "07:55", title: "ขอเบิกเงินซื้อเครื่องมือใหม่ — สแกนเนอร์ OBD2 + 8,500",
    detail: "สแกนเนอร์เก่าใช้ 6 ปีแล้ว อ่านรหัสรถใหม่ ๆ (ปี 2023+) ไม่ได้ ผมหารุ่นใหม่ Launch X431 ราคา 8,500 รับประกัน 2 ปี งานเข้าใหม่ ๆ จะเร็วขึ้นมาก",
    fromTech: "T1", amount: 8500,
    options: [
      { label: "อนุมัติ — ซื้อเลย", note: "ลงทุนคุ้ม", cost: -8500 },
      { label: "อนุมัติแบบผ่อน 3 งวด", note: "บรรเทาภาระ", cost: -8500 },
      { label: "ปฏิเสธ — ใช้ตัวเก่าก่อน", note: "ค่อยเก็บเงิน", cost: 0 },
    ],
  },
  {
    id: "BI-2604-006", kind: "refund", severity: "low", status: "resolved", unread: false,
    created: "เมื่อวาน 16:30", resolvedAt: "เมื่อวาน 17:15",
    title: "ลูกค้าขอเงินคืน — งานล้างหม้อน้ำ",
    detail: "คุณนพดล อ้างว่าหลังล้างหม้อน้ำ น้ำรั่วในวันรุ่งขึ้น ขอคืนเงิน 1,200 ตรวจแล้วเป็นที่ฝาหม้อน้ำเก่าแยกชั้น ไม่เกี่ยวกับงานเรา",
    fromTech: "T3", custId: "C005", jobId: "J2603-000189", amount: 1200,
  },
];

window.GS = {fmtMoney, fmtInt, fmtDateTH, TODAY,
  CUSTOMERS, VEHICLES, JOBS, JOB_STATUS, TECHS, BAYS,
  INVOICES, PAYMENTS, PARTS, SERVICES, WAREHOUSES, SUPPLIERS, WARRANTY,
  KPIS, BOSS_ISSUES };
