<?php
// api_poligrafia/estudio_seguridad/concepto1/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 cleanDecimal($v) {
  if ($v === null) return null;
  if ($v === '' || $v === false) return null;
  $s = str_replace([' ', ','], ['', ''], (string)$v);
  if (!is_numeric($s)) return null;
  return (string)number_format((float)$s, 2, '.', '');
}

function ensureJsonString($v) {
  if ($v === null) return null;

  if (is_array($v)) {
    return json_encode($v, JSON_UNESCAPED_UNICODE);
  }

  $s = trim((string)$v);
  if ($s === '') return null;

  $decoded = json_decode($s, true);
  if (json_last_error() === JSON_ERROR_NONE) return $s;

  // si llega un string suelto, lo envolvemos para no romper
  return json_encode([$s], JSON_UNESCAPED_UNICODE);
}

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 1
  $CONCEPTO = cleanText(pick($body, ['CONCEPTO', 'concepto']));
  $CIUDAD_ORIGEN_FAMILIAR = cleanText(pick($body, ['CIUDAD_ORIGEN_FAMILIAR', 'ciudad_origen_familiar', 'ciudadOrigenFamiliar']));
  $VALORES_MORALES = cleanText(pick($body, ['VALORES_MORALES', 'valores_morales', 'valoresMorales']));
  $PROYECTOS = cleanText(pick($body, ['PROYECTOS', 'proyectos']));
  $ACTIVIDADES_TIEMPO_LIBRE = cleanText(pick($body, ['ACTIVIDADES_TIEMPO_LIBRE', 'actividades_tiempo_libre', 'actividadesTiempoLibre']));
  $SITUACIONES_DIFICILES = cleanText(pick($body, ['SITUACIONES_DIFICILES', 'situaciones_dificiles', 'situacionesDificiles']));
  $ENFERMEDADES_FAMILIA = cleanText(pick($body, ['ENFERMEDADES_FAMILIA', 'enfermedades_familia', 'enfermedadesFamilia']));
  $SOCIO_CLUB = cleanText(pick($body, ['SOCIO_CLUB', 'socio_club', 'socioClub']));
  $TIPO_VIVIENDA = cleanText(pick($body, ['TIPO_VIVIENDA', 'tipo_vivienda', 'tipoVivienda']));
  $OTRO_TIPO_VIVIENDA = cleanText(pick($body, ['OTRO_TIPO_VIVIENDA', 'otro_tipo_vivienda', 'otroTipoVivienda']));
  $LA_VIVIENDA_ES = cleanText(pick($body, ['LA_VIVIENDA_ES', 'la_vivienda_es', 'laViviendaEs']));
  $OTRO_LA_VIVIENDA_ES = cleanText(pick($body, ['OTRO_LA_VIVIENDA_ES', 'otro_la_vivienda_es', 'otroLaViviendaEs']));

  // JSONs (arrays)
  $COMODIDADES_JSON = ensureJsonString(pick($body, ['COMODIDADES_JSON', 'comodidades_json', 'comodidades']));
  $APORTES_JSON     = ensureJsonString(pick($body, ['APORTES_JSON', 'aportes_json', 'aportes']));
  $EGRESOS_JSON     = ensureJsonString(pick($body, ['EGRESOS_JSON', 'egresos_json', 'egresos']));

  $OTRAS_COMODIDADES = cleanText(pick($body, ['OTRAS_COMODIDADES', 'otras_comodidades', 'otrasComodidades']));
  $MAS_SOBRE_VIVIENDA = cleanText(pick($body, ['MAS_SOBRE_VIVIENDA', 'mas_sobre_vivienda', 'masSobreVivienda']));

  $TOTAL_VALOR_APORTADO = cleanDecimal(pick($body, ['TOTAL_VALOR_APORTADO', 'total_valor_aportado', 'totalValorAportado']));
  $TOTAL_EGRESOS = cleanDecimal(pick($body, ['TOTAL_EGRESOS', 'total_egresos', 'totalEgresos']));

  $VEHICULOS = cleanText(pick($body, ['VEHICULOS', 'vehiculos']));
  $INMUEBLES = cleanText(pick($body, ['INMUEBLES', 'inmuebles']));

  // UPSERT por UNIQUE(ID_ESTUDIO)
  $sql = "
    INSERT INTO ESTUDIO_CONCEPTO_1 (
      ID_ESTUDIO,
      ID_CANDIDATO_EMPRESA,
      CONCEPTO,
      CIUDAD_ORIGEN_FAMILIAR,
      VALORES_MORALES,
      PROYECTOS,
      ACTIVIDADES_TIEMPO_LIBRE,
      SITUACIONES_DIFICILES,
      ENFERMEDADES_FAMILIA,
      SOCIO_CLUB,
      TIPO_VIVIENDA,
      OTRO_TIPO_VIVIENDA,
      LA_VIVIENDA_ES,
      OTRO_LA_VIVIENDA_ES,
      COMODIDADES_JSON,
      OTRAS_COMODIDADES,
      MAS_SOBRE_VIVIENDA,
      APORTES_JSON,
      EGRESOS_JSON,
      TOTAL_VALOR_APORTADO,
      TOTAL_EGRESOS,
      VEHICULOS,
      INMUEBLES,
      USUARIO_CREA
    ) VALUES (
      ?, ?,
      ?, ?, ?,
      ?, ?, ?,
      ?, ?, ?,
      ?, ?, ?,
      ?, ?, ?,
      ?, ?,
      ?, ?,
      ?, ?,
      ?
    )
    ON DUPLICATE KEY UPDATE
      ID_CONCEPTO_1 = LAST_INSERT_ID(ID_CONCEPTO_1),
      ID_CANDIDATO_EMPRESA = VALUES(ID_CANDIDATO_EMPRESA),
      CONCEPTO = VALUES(CONCEPTO),
      CIUDAD_ORIGEN_FAMILIAR = VALUES(CIUDAD_ORIGEN_FAMILIAR),
      VALORES_MORALES = VALUES(VALORES_MORALES),
      PROYECTOS = VALUES(PROYECTOS),
      ACTIVIDADES_TIEMPO_LIBRE = VALUES(ACTIVIDADES_TIEMPO_LIBRE),
      SITUACIONES_DIFICILES = VALUES(SITUACIONES_DIFICILES),
      ENFERMEDADES_FAMILIA = VALUES(ENFERMEDADES_FAMILIA),
      SOCIO_CLUB = VALUES(SOCIO_CLUB),
      TIPO_VIVIENDA = VALUES(TIPO_VIVIENDA),
      OTRO_TIPO_VIVIENDA = VALUES(OTRO_TIPO_VIVIENDA),
      LA_VIVIENDA_ES = VALUES(LA_VIVIENDA_ES),
      OTRO_LA_VIVIENDA_ES = VALUES(OTRO_LA_VIVIENDA_ES),
      COMODIDADES_JSON = VALUES(COMODIDADES_JSON),
      OTRAS_COMODIDADES = VALUES(OTRAS_COMODIDADES),
      MAS_SOBRE_VIVIENDA = VALUES(MAS_SOBRE_VIVIENDA),
      APORTES_JSON = VALUES(APORTES_JSON),
      EGRESOS_JSON = VALUES(EGRESOS_JSON),
      TOTAL_VALOR_APORTADO = VALUES(TOTAL_VALOR_APORTADO),
      TOTAL_EGRESOS = VALUES(TOTAL_EGRESOS),
      VEHICULOS = VALUES(VEHICULOS),
      INMUEBLES = VALUES(INMUEBLES),
      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: 24
  // (ID_ESTUDIO i) (ID_CANDIDATO_EMPRESA i)
  // luego 21 strings
  // y final USUARIO_CREA i
  $types = "ii" . str_repeat("s", 21) . "i";

  $stmt->bind_param(
    $types,
    $ID_ESTUDIO,
    $ID_CANDIDATO_EMPRESA,

    $CONCEPTO,
    $CIUDAD_ORIGEN_FAMILIAR,
    $VALORES_MORALES,
    $PROYECTOS,
    $ACTIVIDADES_TIEMPO_LIBRE,
    $SITUACIONES_DIFICILES,
    $ENFERMEDADES_FAMILIA,
    $SOCIO_CLUB,
    $TIPO_VIVIENDA,
    $OTRO_TIPO_VIVIENDA,
    $LA_VIVIENDA_ES,
    $OTRO_LA_VIVIENDA_ES,
    $COMODIDADES_JSON,
    $OTRAS_COMODIDADES,
    $MAS_SOBRE_VIVIENDA,
    $APORTES_JSON,
    $EGRESOS_JSON,
    $TOTAL_VALOR_APORTADO,
    $TOTAL_EGRESOS,
    $VEHICULOS,
    $INMUEBLES,

    $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 1 guardado/actualizado", [
    "ID_ESTUDIO" => $ID_ESTUDIO,
    "ID_CONCEPTO_1" => (int)$id
  ]);

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