'use strict'
// ─────────────────────────────────────────────────────────────────────────────
// Politiques SLA ÉDITABLES (par FILE + PRIORITÉ) — cibles de réponse/résolution en
// MINUTES. Modifiables depuis Ops > Paramètres. Le CALCUL (échéances, dépassement,
// à-risque) se fait côté Ops (composable useSla) à partir de ces politiques + la
// date d'ouverture / 1ʳᵉ réponse du ticket. Ici on ne fait que stocker/servir la config.
//   GET /sla/policies → { policies, defaults }
//   PUT /sla/policies { policies } → remplace (état complet)
// ─────────────────────────────────────────────────────────────────────────────
const { json, parseBody, readJsonFile, writeJsonFile } = require('./helpers')

const FILE = '/app/data/sla_policies.json'

// Cibles de départ raisonnables (MINUTES). Clé = file (issue_type) → priorité → { response, resolution }.
// `_default` = repli pour toute file sans politique propre. Modifiables dans Settings.
const DEFAULTS = {
  _default: {
    Urgent: { response: 30, resolution: 240 },    // 30 min / 4 h
    High: { response: 60, resolution: 480 },       // 1 h / 8 h
    Medium: { response: 240, resolution: 1440 },   // 4 h / 1 j
    Low: { response: 480, resolution: 2880 },      // 8 h / 2 j
  },
}

async function handle (req, res, method, path) {
  if (path !== '/sla/policies') return json(res, 404, { error: 'not found' })
  if (method === 'GET') {
    const p = readJsonFile(FILE, null)
    return json(res, 200, { policies: (p && typeof p === 'object') ? p : DEFAULTS, defaults: DEFAULTS })
  }
  if (method === 'PUT') {
    const b = await parseBody(req)
    const pol = (b && b.policies && typeof b.policies === 'object' && !Array.isArray(b.policies)) ? b.policies : null
    if (!pol) return json(res, 400, { error: 'policies requis (objet file→priorité→{response,resolution})' })
    writeJsonFile(FILE, pol)
    return json(res, 200, { ok: true, policies: pol })
  }
  return json(res, 405, { error: 'method not allowed' })
}

module.exports = { handle, DEFAULTS }
