<?php
require_once __DIR__ . '/inc/auth.php';
exigir_login();
require_once __DIR__ . '/inc/crm.php';
require_once __DIR__ . '/inc/fotos.php';
require_once __DIR__ . '/inc/layout.php';
require_once __DIR__ . '/inc/campos_visita_paneles.php';

$pdo = conn();
$crmid = trim($_GET['crmid'] ?? $_POST['crmid'] ?? '');
if ($crmid === '') { http_response_code(400); die('Falta crmid.'); }

$visita = get_visita($crmid);
if (!$visita) { http_response_code(404); die('Visita no encontrada en el CRM.'); }
$so = $visita['salesorder_no'];
$SECC = campos_visita_paneles();

// Cargar OT existente
function cargar_ot(PDO $pdo, string $so): array {
    try {
        $st = $pdo->prepare("SELECT id, estado, datos_json FROM ot_visita_paneles WHERE salesorder_no = ? LIMIT 1");
        $st->execute([$so]);
        return $st->fetch() ?: [];
    } catch (Throwable $e) {
        log_error('OT load: ' . $e->getMessage());
        http_response_code(500);
        die('Error al leer la OT. Corriste scripts/db/migracion_01_ot.sql? Ver inc/logs/error.log');
    }
}
$ot = cargar_ot($pdo, $so);
$otId  = isset($ot['id']) ? (int)$ot['id'] : null;
$estado = $ot['estado'] ?? 'borrador';
$datos = (!empty($ot['datos_json'])) ? (json_decode($ot['datos_json'], true) ?: []) : [];

$msg = '';

// Borrar foto (GET ?del=ID)
if (isset($_GET['del']) && $otId) {
    borrar_foto($pdo, (int)$_GET['del'], $otId);
    header('Location: ot_form.php?crmid=' . urlencode($crmid));
    exit;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    csrf_check();
    $accion = ($_POST['accion'] ?? 'borrador') === 'completa' ? 'completa' : 'borrador';
    $nuevo = [];
    foreach ($SECC as $sec) {
        foreach ($sec['campos'] as $f) {
            if ($f['t'] === 'calc') continue;
            $nuevo[$f['n']] = trim((string)($_POST[$f['n']] ?? ''));
        }
    }
    $nuevo['tecnico_visita'] = trim((string)($_POST['tecnico_visita'] ?? ''));
    $cp = (float)($nuevo['cantidad_paneles'] ?? 0);
    $pp = (float)($nuevo['potencia_panel_w'] ?? 0);
    $nuevo['tamano_kwp'] = $pp > 0 ? round($cp * $pp / 1000, 3) : '';
    $json = json_encode($nuevo, JSON_UNESCAPED_UNICODE);

    try {
        if ($otId) {
            $up = $pdo->prepare("UPDATE ot_visita_paneles SET estado=?, datos_json=? WHERE id=?");
            $up->execute([$accion, $json, $otId]);
        } else {
            $ins = $pdo->prepare("INSERT INTO ot_visita_paneles (salesorder_no, crmid, cliente, direccion, comuna, region, tecnico, vendedor_email, estado, datos_json, creado_por) VALUES (?,?,?,?,?,?,?,?,?,?,?)");
            $ins->execute([$so, $crmid, $visita['cliente'], $visita['direccion'], $visita['comuna'], $visita['region'], $visita['tecnico'], $visita['vendedor_email'], $accion, $json, usuario_actual()]);
            $otId = (int)$pdo->lastInsertId();
        }
        // Fotos subidas
        foreach ($SECC as $sec) {
            if (empty($sec['fotos'])) continue;
            $key = 'fotos_' . $sec['fotos'];
            if (empty($_FILES[$key]) || !is_array($_FILES[$key]['name'])) continue;
            $f = $_FILES[$key];
            for ($i = 0; $i < count($f['name']); $i++) {
                if (($f['error'][$i] ?? 1) !== UPLOAD_ERR_OK) continue;
                $one = ['error'=>$f['error'][$i], 'tmp_name'=>$f['tmp_name'][$i], 'name'=>$f['name'][$i]];
                $ruta = guardar_foto($otId, $sec['fotos'], $one);
                if ($ruta) registrar_foto($pdo, $otId, $sec['fotos'], $ruta);
            }
        }
        $estado = $accion; $datos = $nuevo;
        $msg = '<div class="msg msg-ok">OT guardada (' . e($accion) . ').</div>';
    } catch (Throwable $ex) {
        log_error('OT save: ' . $ex->getMessage());
        $msg = '<div class="msg msg-err">No se pudo guardar. Ver inc/logs/error.log</div>';
    }
}

$fotos = $otId ? fotos_de_ot($pdo, $otId) : [];

function val($datos, $n) { return isset($datos[$n]) ? (string)$datos[$n] : ''; }

function render_campo(array $f, array $datos): string {
    $n = $f['n']; $l = $f['l']; $t = $f['t']; $v = val($datos, $n);
    $int = !empty($f['interno']) ? ' <span class="int">INTERNO</span>' : '';
    $out = '<div class="fld"><label>' . e($l) . $int . '</label>';
    if ($t === 'text' || $t === 'num') {
        $tipo = $t === 'num' ? 'number' : 'text';
        $extra = $t === 'num' ? ' step="any"' : '';
        $out .= '<input type="' . $tipo . '"' . $extra . ' name="' . e($n) . '" value="' . e($v) . '">';
    } elseif ($t === 'calc') {
        $out .= '<input type="text" id="' . e($n) . '" value="' . e($v) . '" readonly>';
    } elseif ($t === 'area') {
        $out .= '<textarea name="' . e($n) . '">' . e($v) . '</textarea>';
    } elseif ($t === 'bool') {
        $out .= '<select name="' . e($n) . '"><option value="">-</option>';
        $out .= '<option value="1"' . ($v==='1'?' selected':'') . '>Si</option>';
        $out .= '<option value="0"' . ($v==='0'?' selected':'') . '>No</option></select>';
    } elseif ($t === 'select') {
        $out .= '<select name="' . e($n) . '"><option value="">-</option>';
        foreach (opciones($f['g']) as $op) {
            $out .= '<option value="' . e($op) . '"' . ($v===$op?' selected':'') . '>' . e($op) . '</option>';
        }
        $out .= '</select>';
    }
    return $out . '</div>';
}

layout_top('OT - ' . $so, '');
echo $msg;
?>
<p class="lead">Orden de Trabajo — Visita de factibilidad ecosolar ·
  Estado: <span class="pill <?= $estado==='completa'?'p-ok':'p-vac' ?>"><?= e($estado) ?></span>
  <?php if ($otId): ?> · <a href="pdf.php?crmid=<?= e($crmid) ?>" target="_blank">Ver PDF</a><?php endif; ?>
</p>

<div class="card" style="padding:16px 18px;margin-bottom:18px">
  <h3 style="margin:0 0 10px">Antecedentes (desde el CRM)</h3>
  <div class="ant">
    <div><span class="k">Pedido</span><?= e($so) ?></div>
    <div><span class="k">Cliente</span><?= e($visita['cliente']) ?></div>
    <div><span class="k">Direccion</span><?= e($visita['direccion']) ?></div>
    <div><span class="k">Comuna</span><?= e($visita['comuna']) ?></div>
    <div><span class="k">Region</span><?= e($visita['region']) ?></div>
    <div><span class="k">Vendedor</span><?= e(vendedor_nombre($visita)) ?></div>
  </div>
</div>

<form method="post" action="ot_form.php" enctype="multipart/form-data">
  <?= csrf_field() ?>
  <input type="hidden" name="crmid" value="<?= e($crmid) ?>">

  <div class="card" style="padding:16px 18px;margin-bottom:16px">
    <div class="fld"><label>Tecnico/s de la visita</label>
      <input type="text" name="tecnico_visita" value="<?= e(val($datos,'tecnico_visita') ?: $visita['tecnico']) ?>"></div>
  </div>

  <?php foreach ($SECC as $sec): ?>
    <div class="card sec">
      <h3><?= e($sec['titulo']) ?></h3>
      <div class="grid-campos">
        <?php foreach ($sec['campos'] as $f) echo render_campo($f, $datos); ?>
      </div>
      <?php if (!empty($sec['fotos'])): $sc = $sec['fotos']; ?>
        <div class="fotos">
          <?php if (!empty($fotos[$sc])): foreach ($fotos[$sc] as $ph): ?>
            <div class="foto">
              <img src="<?= e($ph['ruta_local']) ?>" alt="">
              <a class="del" href="ot_form.php?crmid=<?= e($crmid) ?>&del=<?= (int)$ph['id'] ?>" title="Quitar">&times;</a>
            </div>
          <?php endforeach; endif; ?>
        </div>
        <label class="muted">Agregar fotos (<?= e($sc) ?>):</label>
        <input type="file" name="fotos_<?= e($sc) ?>[]" accept="image/*" multiple capture="environment">
      <?php endif; ?>
    </div>
  <?php endforeach; ?>

  <div class="acciones-ot">
    <button class="btn btn-ghost" type="submit" name="accion" value="borrador">Guardar borrador</button>
    <button class="btn btn-primary" type="submit" name="accion" value="completa">Marcar completa</button>
    <a class="btn btn-ghost" href="mis_visitas.php">Volver</a>
  </div>
</form>

<script>
function calcKwp(){
  var cp = parseFloat((document.getElementsByName('cantidad_paneles')[0]||{}).value)||0;
  var pp = parseFloat((document.getElementsByName('potencia_panel_w')[0]||{}).value)||0;
  var el = document.getElementById('tamano_kwp');
  if (el) el.value = pp>0 ? (cp*pp/1000).toFixed(3) : '';
}
['cantidad_paneles','potencia_panel_w'].forEach(function(n){
  var el = document.getElementsByName(n)[0];
  if (el) el.addEventListener('input', calcKwp);
});
</script>
<?php layout_bottom();
