'use strict'
/**
 * util/legacy-parse.js — parseurs/mapping PURS du pont legacy (osTicket → Dispatch Job).
 * Aucune dépendance I/O (pg/mysql/erp) → testable en isolation (Phase 1 : logique pure séparée des I/O).
 */

// dept_id legacy → job_type Dispatch Job (valeurs valides : Installation/Réparation/Retrait/Dépannage/Autre)
const DEPT_JOBTYPE = {
  27: 'Installation', 12: 'Installation', 7: 'Installation', // Installation Fibre / Installation / Monteur
  26: 'Réparation', 10: 'Réparation', 33: 'Réparation', // Réparation Fibre / Réparation / Fusionneur
  15: 'Retrait', // Désinstallation
}
const DUR = { Installation: 2, 'Réparation': 1.5, Retrait: 1, 'Dépannage': 1, Autre: 1 } // durée par défaut (le legacy n'en a pas)
const jobType = (deptId) => DEPT_JOBTYPE[deptId] || 'Autre'
const prio = (p) => { p = Number(p) || 0; return p >= 3 ? 'high' : p === 2 ? 'medium' : 'low' }
// due_date legacy = epoch à minuit LOCAL → date America/Toronto (évite le décalage UTC)
const tzDate = (unix) => (unix ? new Date(Number(unix) * 1000).toLocaleDateString('en-CA', { timeZone: 'America/Toronto' }) : null)
function startTime (dueTime) {
  if (!dueTime) return null
  const m = String(dueTime).match(/^(\d{1,2}):(\d{2})/)
  if (m) return m[1].padStart(2, '0') + ':' + m[2] + ':00'
  const t = String(dueTime).toLowerCase()
  if (t === 'am') return '08:00:00'
  if (t === 'pm') return '13:00:00'
  return null // 'day' / inconnu → pas d'heure précise
}
// Coords legacy = chaînes ("-73.5599440" / "45.2528570"). Parse + valide les bornes Québec
// (lat 44→63, lon -80→-57) pour rejeter 0/0, placeholders et valeurs aberrantes → routage fiable.
function coord (lat, lon) {
  const la = parseFloat(lat), lo = parseFloat(lon)
  if (!isFinite(la) || !isFinite(lo)) return null
  if (la < 44 || la > 63 || lo < -80 || lo > -57) return null
  return { lat: la, lon: lo }
}

module.exports = { DEPT_JOBTYPE, DUR, jobType, prio, tzDate, startTime, coord }
