// ─────────────────────────────────────────────────────────────
// CONTRACT TEMPLATE LIBRARY
// ออกแบบโดย: legal-manager (เนื้อหากฎหมาย) + civil-lead (scope เทคนิค) + it-lead (โครงสร้างระบบ)
// อ้างอิง: ประมวลกฎหมายแพ่งและพาณิชย์ (จ้างทำของ ม.587-607), มาตรฐาน วสท./มยผ.
// หลักการ: ปกป้องผลประโยชน์ SYK เป็นหลัก แต่ยืนตามกฎหมายไทยรอบด้าน
// ─────────────────────────────────────────────────────────────

// ── Reusable legal clause snippets (ภาษากฎหมายที่ใช้จริง) ──
const CLAUSE = {
  // ความล่าช้า / ค่าปรับ — เข้าข้างผู้ว่าจ้าง (SYK เมื่อเป็นผู้ว่าจ้างผู้รับเหมาย่อย)
  liquidatedDamages: (rate = '0.10') =>
    `ผู้รับจ้างยินยอมให้ผู้ว่าจ้างปรับเป็นรายวันในอัตราร้อยละ ${rate} ของมูลค่าสัญญาต่อวัน นับแต่วันที่ครบกำหนดส่งมอบงานจนถึงวันที่งานแล้วเสร็จสมบูรณ์ โดยไม่ต้องบอกกล่าวล่วงหน้า และผู้ว่าจ้างมีสิทธิหักค่าปรับจากเงินงวดหรือเงินประกันผลงานได้ทันที`,
  // เงินประกันผลงาน
  retention: (pct = '5', years = '1') =>
    `ผู้ว่าจ้างมีสิทธิหักเงินประกันผลงานในอัตราร้อยละ ${pct} ของมูลค่างานแต่ละงวด และจะคืนให้เมื่อพ้นกำหนดระยะเวลารับประกันผลงาน ${years} ปี นับแต่วันส่งมอบงานงวดสุดท้าย โดยมีเงื่อนไขว่าผู้รับจ้างได้แก้ไขความชำรุดบกพร่องครบถ้วนแล้ว`,
  // หลักประกันสัญญา (Performance Bond)
  performanceBond: (pct = '5') =>
    `ในวันลงนามสัญญา ผู้รับจ้างต้องวางหลักประกันการปฏิบัติตามสัญญาเป็นเงินสด หรือหนังสือค้ำประกันของธนาคาร ในวงเงินร้อยละ ${pct} ของมูลค่าสัญญา หากผู้รับจ้างผิดสัญญา ผู้ว่าจ้างมีสิทธิริบหลักประกันได้ทันที`,
  // การรับประกันผลงาน
  defectsLiability: (years = '1') =>
    `ผู้รับจ้างรับประกันความชำรุดบกพร่องของงานเป็นระยะเวลา ${years} ปี นับแต่วันส่งมอบงาน หากเกิดความเสียหายอันมิใช่ความผิดของผู้ว่าจ้าง ผู้รับจ้างต้องเข้าแก้ไขภายใน 7 วันนับแต่ได้รับแจ้ง หากเพิกเฉย ผู้ว่าจ้างมีสิทธิจ้างผู้อื่นแก้ไขโดยหักจากเงินประกันผลงาน`,
  // การเปลี่ยนแปลงงาน
  variation:
    `การเพิ่ม ลด หรือเปลี่ยนแปลงงานนอกเหนือจากที่กำหนดในสัญญา ต้องทำเป็นหนังสือและได้รับอนุมัติจากผู้ว่าจ้างเป็นลายลักษณ์อักษรก่อนดำเนินการ มิฉะนั้นผู้ว่าจ้างไม่ต้องรับผิดชอบค่าใช้จ่ายที่เพิ่มขึ้น`,
  // บอกเลิกสัญญา — เข้าข้างผู้ว่าจ้าง
  termination:
    `หากผู้รับจ้างผิดสัญญาข้อหนึ่งข้อใด หรือทำงานล่าช้าเกินกว่า 30 วัน หรือทิ้งงาน ผู้ว่าจ้างมีสิทธิบอกเลิกสัญญาได้ทันทีโดยไม่ต้องบอกกล่าวล่วงหน้า ริบหลักประกันและเงินประกันผลงาน และเรียกค่าเสียหายเพิ่มเติมได้`,
  // เหตุสุดวิสัย
  forceMajeure:
    `กรณีเกิดเหตุสุดวิสัยตามกฎหมาย (ภัยธรรมชาติ สงคราม โรคระบาด คำสั่งราชการ) ที่ทำให้ไม่อาจปฏิบัติตามสัญญาได้ คู่สัญญาฝ่ายที่ได้รับผลกระทบต้องแจ้งเป็นหนังสือภายใน 7 วัน และขยายระยะเวลาได้เท่าที่เหตุนั้นดำรงอยู่ โดยไม่มีสิทธิเรียกค่าเสียหาย`,
  // ประกันภัย
  insurance:
    `ผู้รับจ้างต้องจัดทำประกันภัยการก่อสร้าง (Contractor's All Risks) และประกันความรับผิดต่อบุคคลภายนอก ตลอดระยะเวลาก่อสร้าง โดยระบุผู้ว่าจ้างเป็นผู้ร่วมเอาประกัน และส่งสำเนากรมธรรม์ให้ผู้ว่าจ้างก่อนเริ่มงาน`,
  // ความปลอดภัย
  safety:
    `ผู้รับจ้างต้องปฏิบัติตามกฎหมายความปลอดภัยในการทำงาน จัดหาอุปกรณ์ป้องกันส่วนบุคคล (PPE) ให้คนงาน และรับผิดชอบอุบัติเหตุที่เกิดขึ้นในเขตงานทั้งหมด ผู้ว่าจ้างไม่ต้องรับผิดชอบใดๆ`,
  // ระงับข้อพิพาท
  dispute:
    `ข้อพิพาทที่เกิดจากสัญญานี้ ให้คู่สัญญาเจรจาโดยสุจริตก่อน หากตกลงไม่ได้ ให้นำคดีขึ้นสู่ศาลที่มีเขตอำนาจ ณ ภูมิลำเนาของผู้ว่าจ้าง โดยใช้กฎหมายไทยบังคับ`,
  // ทรัพย์สินทางปัญญา / แบบ
  ownership:
    `แบบก่อสร้าง เอกสาร และผลงานทั้งหมดที่จัดทำขึ้นภายใต้สัญญานี้ เป็นกรรมสิทธิ์ของผู้ว่าจ้าง ผู้รับจ้างไม่มีสิทธินำไปใช้กับโครงการอื่นโดยมิได้รับอนุญาต`,
  // อากรแสตมป์
  stamp:
    `สัญญานี้ปิดอากรแสตมป์ตามประมวลรัษฎากร (1 บาท ต่อทุก 1,000 บาทของมูลค่าสัญญา) โดยผู้รับจ้างเป็นผู้รับผิดชอบ`,
};

// ── Subcontractor work-type technical scope (civil-lead) ──
const SUB_WORK_TYPES = {
  structure: {
    th: 'งานโครงสร้าง ค.ส.ล. / เหล็ก', icon: '🏗️',
    scope: 'งานฐานราก เสาเข็ม เสา คาน พื้น และโครงสร้างคอนกรีตเสริมเหล็ก/โครงเหล็กทั้งหมดตามแบบ',
    standards: [
      'คอนกรีตกำลังอัดไม่น้อยกว่าที่กำหนดในแบบ (ทดสอบ Cube Test ทุก 50 ลบ.ม.)',
      'เหล็กเสริมเป็นไปตาม มอก. 24-2559 (SD40/SD50) มีใบรับรอง (Mill Certificate)',
      'แบบ Shop Drawing ต้องได้รับอนุมัติก่อนดำเนินการ',
      'การเทคอนกรีตต้องบ่มอย่างน้อย 7 วัน และทดสอบการรับน้ำหนักตามที่วิศวกรกำหนด',
    ],
    warranty: '2', retention: '10', // โครงสร้างประกัน 2 ปี เงินประกัน 10%
  },
  masonry: {
    th: 'งานก่อ-ฉาบ', icon: '🧱',
    scope: 'งานก่อผนังอิฐมอญ/อิฐมวลเบา ฉาบปูนเรียบ ทั้งภายในและภายนอกตามแบบ',
    standards: [
      'ผนังต้องได้ดิ่ง-ได้ฉาก ความคลาดเคลื่อนไม่เกิน 5 มม. ต่อ 2 เมตร',
      'ปูนก่อ-ฉาบเป็นไปตามอัตราส่วนมาตรฐาน บ่มผิวฉาบป้องกันการแตกร้าว',
      'ฝังท่อ-กล่องไฟ-ประปาในผนังให้เรียบร้อยก่อนฉาบ',
    ],
    warranty: '1', retention: '5',
  },
  tile: {
    th: 'งานปูกระเบื้อง', icon: '🟫',
    scope: 'งานปูกระเบื้องพื้น-ผนัง เซรามิค/แกรนิตโต้/หินขัด รวมงานยาแนวและกันซึม',
    standards: [
      'ปูได้ระดับ ไม่โก่ง-ไม่ลอย (เคาะฟังเสียงทุกแผ่น)',
      'ร่องยาแนวสม่ำเสมอ ใช้กาวซีเมนต์/ยาแนวคุณภาพ',
      'พื้นที่เปียก (ห้องน้ำ-ระเบียง) ต้องทำระบบกันซึมก่อนปู และทดสอบขังน้ำ 24 ชม.',
    ],
    warranty: '1', retention: '5',
  },
  electrical: {
    th: 'งานระบบไฟฟ้า', icon: '⚡',
    scope: 'งานเดินสายไฟ ติดตั้งอุปกรณ์ ตู้ควบคุม เต้ารับ สวิตช์ ระบบแสงสว่าง และระบบสื่อสารตามแบบ',
    standards: [
      'ติดตั้งตามมาตรฐาน วสท. (EIT) และข้อกำหนดการไฟฟ้า',
      'สายไฟได้ มอก. ขนาดเหมาะกับโหลด เดินในท่อร้อยสายเรียบร้อย',
      'มีระบบสายดิน (Ground) และเครื่องตัดไฟรั่ว (RCD/RCBO)',
      'ทดสอบค่าความเป็นฉนวน (Insulation Test) และส่งมอบผลทดสอบ',
    ],
    warranty: '1', retention: '5',
  },
  plumbing: {
    th: 'งานระบบประปา-สุขาภิบาล', icon: '💧',
    scope: 'งานเดินท่อน้ำดี-น้ำทิ้ง ติดตั้งสุขภัณฑ์ ปั๊มน้ำ ถังบำบัด และระบบระบายน้ำตามแบบ',
    standards: [
      'ท่อน้ำดี (PPR/PVC) ทดสอบแรงดันไม่น้อยกว่า 8 บาร์ นาน 1 ชม. ไม่รั่วซึม',
      'ท่อน้ำทิ้งลาดเอียงเหมาะสม (1:100 ขึ้นไป) ระบายได้ดีไม่อุดตัน',
      'สุขภัณฑ์ติดตั้งมั่นคง ไม่รั่วซึม ทดสอบการใช้งานครบถ้วน',
    ],
    warranty: '1', retention: '5',
  },
  custom: {
    th: 'งานอื่นๆ (กำหนดเอง)', icon: '🔧',
    scope: '', standards: [], warranty: '1', retention: '5',
  },
};

// ── Contract type templates (legal-manager) ──
window.CONTRACT_TEMPLATES = {
  // สัญญาจ้างเหมาก่อสร้าง (ลูกค้า) — SYK เป็นผู้รับจ้าง → เนื้อหาสมดุล แต่กันความเสี่ยง
  'Owner-Contractor': {
    label: 'สัญญาจ้างเหมาก่อสร้าง (ลูกค้า)',
    titleTH: 'สัญญาจ้างเหมาก่อสร้าง',
    titleEN: 'CONSTRUCTION CONTRACT',
    sykRole: 'ผู้รับจ้าง',          // SYK = contractor
    counterRole: 'ผู้ว่าจ้าง',       // customer = owner
    defaultRetention: 0.05,
    defaultWarrantyYears: 1,
    clauses: [
      { no: 1, title: 'ขอบเขตงาน', body: 'ผู้รับจ้างตกลงรับจ้างก่อสร้างตามแบบรูปและรายการประกอบแบบ (BOQ) ที่แนบท้ายสัญญา ซึ่งถือเป็นส่วนหนึ่งของสัญญานี้' },
      { no: 2, title: 'เอกสารประกอบสัญญา', body: 'แบบก่อสร้าง รายการคำนวณ BOQ และข้อกำหนดเฉพาะ (Specification) ที่แนบท้าย ถือเป็นส่วนหนึ่งของสัญญา หากขัดแย้งกัน ให้ยึดเอกสารที่เป็นประโยชน์ต่อความมั่นคงแข็งแรงของงานเป็นหลัก' },
      { no: 3, title: 'ระยะเวลาดำเนินการ', body: 'ผู้รับจ้างต้องเริ่มงานและส่งมอบงานตามกำหนดในสัญญา การขยายเวลาต้องได้รับความเห็นชอบเป็นหนังสือ' },
      { no: 4, title: 'การชำระเงินตามงวดงาน', body: 'ผู้ว่าจ้างชำระเงินตามงวดงานที่กำหนดในตารางงวดงานแนบท้าย เมื่อผู้รับจ้างส่งมอบงานแต่ละงวดและผ่านการตรวจรับ' },
      { no: 5, title: 'เงินประกันผลงาน', body: CLAUSE.retention('5', '1') },
      { no: 6, title: 'การรับประกันผลงาน', body: CLAUSE.defectsLiability('1') },
      { no: 7, title: 'การเปลี่ยนแปลงงาน', body: CLAUSE.variation },
      { no: 8, title: 'เหตุสุดวิสัย', body: CLAUSE.forceMajeure },
      { no: 9, title: 'ความปลอดภัยและประกันภัย', body: CLAUSE.safety },
      { no: 10, title: 'การระงับข้อพิพาท', body: CLAUSE.dispute },
      { no: 11, title: 'อากรแสตมป์', body: CLAUSE.stamp },
    ],
  },

  // สัญญาจ้างผู้รับเหมาช่วง — SYK เป็นผู้ว่าจ้าง → เนื้อหาเข้าข้าง SYK เต็มที่
  'Subcontract': {
    label: 'สัญญาจ้างผู้รับเหมาช่วง',
    titleTH: 'สัญญาจ้างเหมาช่วง',
    titleEN: 'SUBCONTRACT AGREEMENT',
    sykRole: 'ผู้ว่าจ้าง',          // SYK = main contractor (hires sub)
    counterRole: 'ผู้รับจ้างช่วง',
    defaultRetention: 0.05,
    defaultWarrantyYears: 1,
    hasWorkType: true,             // ต้องเลือกประเภทงานย่อย
    clauses: [
      { no: 1, title: 'ขอบเขตงาน', body: '' /* เติมจาก work-type scope */ },
      { no: 2, title: 'มาตรฐานงาน', body: '' /* เติมจาก work-type standards */ },
      { no: 3, title: 'การสอดคล้องกับสัญญาหลัก (Back-to-Back)', body: 'ผู้รับจ้างช่วงต้องปฏิบัติตามเงื่อนไขของสัญญาหลักระหว่างผู้ว่าจ้างกับเจ้าของโครงการทุกประการ และยอมรับว่าหากเจ้าของโครงการไม่อนุมัติงานส่วนใด ผู้รับจ้างช่วงต้องแก้ไขโดยไม่คิดค่าใช้จ่ายเพิ่ม' },
      { no: 4, title: 'การประสานงานกับผู้รับเหมารายอื่น', body: 'ผู้รับจ้างช่วงต้องประสานงานและไม่กีดขวางการทำงานของผู้รับเหมารายอื่น หากเกิดความเสียหายต่องานของผู้อื่นอันเนื่องจากความผิดของตน ต้องรับผิดชอบทั้งหมด' },
      { no: 5, title: 'การชำระเงินตามความก้าวหน้า', body: 'ผู้ว่าจ้างชำระเงินเมื่อผู้รับจ้างช่วงส่งมอบงานและผ่านการตรวจรับ โดยผู้ว่าจ้างมีสิทธิชะลอการจ่ายหากเจ้าของโครงการยังไม่จ่ายเงินงวดที่เกี่ยวข้อง (Pay-when-paid)' },
      { no: 6, title: 'เงินประกันผลงาน', body: CLAUSE.retention('5', '1') },
      { no: 7, title: 'ค่าปรับความล่าช้า', body: CLAUSE.liquidatedDamages('0.10') },
      { no: 8, title: 'การรับประกันผลงาน', body: CLAUSE.defectsLiability('1') },
      { no: 9, title: 'การบอกเลิกสัญญา', body: CLAUSE.termination },
      { no: 10, title: 'ความปลอดภัย', body: CLAUSE.safety },
      { no: 11, title: 'การเปลี่ยนแปลงงาน', body: CLAUSE.variation },
      { no: 12, title: 'การระงับข้อพิพาท', body: CLAUSE.dispute },
      { no: 13, title: 'อากรแสตมป์', body: CLAUSE.stamp },
    ],
  },

  // สัญญาจัดซื้อ
  'Supply': {
    label: 'สัญญาจัดซื้อวัสดุ',
    titleTH: 'สัญญาซื้อขายวัสดุก่อสร้าง',
    titleEN: 'SUPPLY AGREEMENT',
    sykRole: 'ผู้ซื้อ',
    counterRole: 'ผู้ขาย',
    defaultRetention: 0,
    defaultWarrantyYears: 1,
    clauses: [
      { no: 1, title: 'รายการสินค้า', body: 'ผู้ขายตกลงส่งมอบวัสดุตามรายการ จำนวน และคุณภาพที่ระบุในใบสั่งซื้อ (PO) แนบท้าย' },
      { no: 2, title: 'มาตรฐานสินค้า', body: 'วัสดุต้องได้มาตรฐาน มอก. หรือมาตรฐานที่ผู้ซื้อกำหนด พร้อมใบรับรองคุณภาพ' },
      { no: 3, title: 'การส่งมอบ', body: 'ผู้ขายต้องส่งมอบ ณ สถานที่และเวลาที่กำหนด หากล่าช้าต้องรับผิดชอบค่าเสียหาย' },
      { no: 4, title: 'การตรวจรับและการคืนสินค้า', body: 'ผู้ซื้อมีสิทธิตรวจสอบและปฏิเสธสินค้าที่ไม่ได้คุณภาพ ผู้ขายต้องเปลี่ยน/คืนเงินภายใน 7 วัน' },
      { no: 5, title: 'การชำระเงิน', body: 'ผู้ซื้อชำระเงินภายในกำหนดหลังตรวจรับสินค้าครบถ้วนและถูกต้อง' },
      { no: 6, title: 'การรับประกันสินค้า', body: CLAUSE.defectsLiability('1') },
      { no: 7, title: 'การระงับข้อพิพาท', body: CLAUSE.dispute },
    ],
  },
};

window.SUB_WORK_TYPES = SUB_WORK_TYPES;
window.CONTRACT_CLAUSE = CLAUSE;

// Build clauses for a contract — fills work-type scope/standards for subcontracts
window.buildContractClauses = function (kind, workType) {
  const tpl = window.CONTRACT_TEMPLATES[kind];
  if (!tpl) return [];
  const clauses = tpl.clauses.map(c => ({ ...c }));
  if (kind === 'Subcontract' && workType && SUB_WORK_TYPES[workType]) {
    const wt = SUB_WORK_TYPES[workType];
    // Clause 1 = scope, Clause 2 = standards
    const c1 = clauses.find(c => c.no === 1);
    const c2 = clauses.find(c => c.no === 2);
    if (c1) c1.body = `ผู้รับจ้างช่วงตกลงรับจ้าง${wt.th}: ${wt.scope}`;
    if (c2) c2.body = wt.standards.map((s, i) => `(${i + 1}) ${s}`).join('\n');
  }
  return clauses;
};
