/* ============================================================
   ISO 19650 naming engine — build & validate container names
   Pure logic (no React). Used by the upload modal.
   ============================================================ */

const ISO_FIELDS = [
  { key:'project',    label:'Project',        example:'PRJ01', placeholder:'PRJ01', width:1 },
  { key:'originator', label:'Originator',     example:'ARC',   placeholder:'ARC',   width:1 },
  { key:'volume',     label:'Volume/System',  example:'B01',   placeholder:'B01 · ZZ=tất cả · XX=N/A', width:1 },
  { key:'level',      label:'Level/Location', example:'01',    placeholder:'01',    width:1 },
  { key:'type',       label:'Type',       example:'M3', width:1, options:[['DR','DR · Bản vẽ 2D'],['M2','M2 · Mô hình 2D'],['M3','M3 · Mô hình 3D'],['SH','SH · Sheet'],['SP','SP · Đặc tả'],['RP','RP · Báo cáo'],['SC','SC · Lịch/Bảng']] },
  { key:'discipline', label:'Discipline', example:'A',  width:1, options:[['A','A · Kiến trúc'],['S','S · Kết cấu'],['I','I · Hạ tầng'],['M','M · MEP'],['C','C · Chung']] },
  { key:'number',     label:'Number',         example:'0001',  placeholder:'0001',  width:1 },
];

function buildName(values) {
  return ISO_FIELDS.map(field => {
    const raw = values[field.key];
    const trimmed = (typeof raw === 'string') ? raw.trim() : '';
    return trimmed || '___';
  }).join('-');
}

function validateName(values) {
  const errors = [];
  for (const field of ISO_FIELDS) {
    const raw = values[field.key];
    const trimmed = (typeof raw === 'string') ? raw.trim() : '';
    const label = field.label;

    if (!trimmed) {
      errors.push({ field: field.key, msg: 'Thiếu trường ' + label });
      continue;
    }
    if (trimmed.includes(' ') || trimmed.includes('-')) {
      errors.push({ field: field.key, msg: 'Trường ' + label + ' không được chứa dấu cách hoặc gạch nối' });
      continue;
    }
    if (!/^[A-Za-z0-9]+$/.test(trimmed)) {
      errors.push({ field: field.key, msg: 'Trường ' + label + ' chỉ gồm chữ và số' });
      continue;
    }
    if (field.key === 'number' && !/^[0-9]+$/.test(trimmed)) {
      errors.push({ field: field.key, msg: 'Number phải là chữ số' });
      continue;
    }
    if (['project','originator','type','discipline'].includes(field.key) && trimmed !== trimmed.toUpperCase()) {
      errors.push({ field: field.key, msg: label + ' nên viết HOA' });
      continue;
    }
  }
  return { ok: errors.length === 0, errors };
}

window.ISO_FIELDS = ISO_FIELDS;
window.buildName = buildName;
window.validateName = validateName;
