<?php
// api_poligrafia/estudio_seguridad/concepto3/upsert.php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// CORS
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
  http_response_code(200);
  exit;
}

require_once(__DIR__ . '/../../config.php');

function respond($success, $message, $data = null, $code = 200) {
  http_response_code($code);
  echo json_encode([
    "success" => $success,
    "message" => $message,
    "data" => $data
  ], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
  exit;
}

function pick($arr, $keys, $default = null) {
  foreach ((array)$keys as $k) {
    if (array_key_exists($k, $arr)) return $arr[$k];
  }
  return $default;
}

function cleanText($v) {
  if ($v === null) return null;
  $v = trim((string)$v);
  return $v === '' ? null : $v;
}

function cleanInt($v) {
  if ($v === null) return null;
  if ($v === '' || $v === false) return null;
  $n = (int)$v;
  return $n === 0 ? null : $n;
}

function cleanEnum($v, $allowed) {
  $v = cleanText($v);
  if (!$v) return null;
  return in_array($v, $allowed, true) ? $v : null;
}

try {
  if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    respond(false, "Método no permitido", null, 405);
  }

  $raw  = file_get_contents("php://input");
  $body = json_decode($raw, true);

  if (!is_array($body)) {
    respond(false, "JSON inválido", ["raw" => $raw], 400);
  }

  // Obligatorios
  $ID_ESTUDIO           = cleanInt(pick($body, ['ID_ESTUDIO', 'id_estudio']));
  $ID_CANDIDATO_EMPRESA = cleanInt(pick($body, ['ID_CANDIDATO_EMPRESA', 'id_candidato_empresa']));
  $USUARIO_CREA         = cleanInt(pick($body, ['USUARIO_CREA', 'usuario_crea']));

  if (!$ID_ESTUDIO || !$ID_CANDIDATO_EMPRESA || !$USUARIO_CREA) {
    respond(false, "Faltan campos obligatorios: ID_ESTUDIO, ID_CANDIDATO_EMPRESA, USUARIO_CREA", null, 422);
  }

  // Campos Concepto 3
  $CONCEPTO = cleanText(pick($body, ['CONCEPTO', 'concepto']));
  $ANTECEDENTES_PENALES = cleanEnum(
    pick($body, ['ANTECEDENTES_PENALES', 'antecedentes_penales', 'antecedentesPenales']),
    ['Si', 'No']
  );
  $CONCEPTO_FINAL = cleanText(pick($body, ['CONCEPTO_FINAL', 'concepto_final', 'conceptoFinal']));
  $RESULTADO_VISITA = cleanEnum(
    pick($body, ['RESULTADO_VISITA', 'resultado_visita', 'resultadoVisita']),
    ['Confiable', 'Desfavorable']
  );

  // UPSERT por UNIQUE(ID_ESTUDIO)
  $sql = "
    INSERT INTO ESTUDIO_CONCEPTO_3 (
      ID_ESTUDIO,
      ID_CANDIDATO_EMPRESA,
      CONCEPTO,
      ANTECEDENTES_PENALES,
      CONCEPTO_FINAL,
      RESULTADO_VISITA,
      USUARIO_CREA
    ) VALUES (
      ?, ?,
      ?, ?,
      ?, ?,
      ?
    )
    ON DUPLICATE KEY UPDATE
      ID_CONCEPTO_3 = LAST_INSERT_ID(ID_CONCEPTO_3),
      ID_CANDIDATO_EMPRESA = VALUES(ID_CANDIDATO_EMPRESA),
      CONCEPTO = VALUES(CONCEPTO),
      ANTECEDENTES_PENALES = VALUES(ANTECEDENTES_PENALES),
      CONCEPTO_FINAL = VALUES(CONCEPTO_FINAL),
      RESULTADO_VISITA = VALUES(RESULTADO_VISITA),
      USUARIO_ACTUALIZA = VALUES(USUARIO_CREA),
      FECHA_ACTUALIZA = NOW(),
      ESTADO_REGISTRO = 1
  ";

  $stmt = $mysqli->prepare($sql);
  if (!$stmt) {
    respond(false, "Error prepare: " . $mysqli->error, null, 500);
  }

  // placeholders: 7
  // i i s s s s i
  $types = "iissssi";

  $stmt->bind_param(
    $types,
    $ID_ESTUDIO,
    $ID_CANDIDATO_EMPRESA,
    $CONCEPTO,
    $ANTECEDENTES_PENALES,
    $CONCEPTO_FINAL,
    $RESULTADO_VISITA,
    $USUARIO_CREA
  );

  if (!$stmt->execute()) {
    $err = $stmt->error;
    $stmt->close();
    respond(false, "Error execute: " . $err, null, 500);
  }

  $id = $stmt->insert_id;
  $stmt->close();

  respond(true, "Concepto Nro 3 guardado/actualizado", [
    "ID_ESTUDIO" => $ID_ESTUDIO,
    "ID_CONCEPTO_3" => (int)$id
  ]);

} catch (Exception $e) {
  respond(false, $e->getMessage(), null, 500);
}
