<?php
// ajax/upload_media_producto.php
header('Content-Type: application/json; charset=utf-8');
session_start();

// Si vas a actualizar en BD descomenta y ajusta:
# require_once __DIR__ . '/../includes/db.php'; // aquí está connectDB($r);
// $mysqli = connectDB($r);

$resp = ['ok'=>false];

try{
  if($_SERVER['REQUEST_METHOD']!=='POST') throw new Exception('Método no permitido');

  $tipo = $_POST['tipo'] ?? '';
  if(!in_array($tipo, ['imagen','video_m','video_s'])) throw new Exception('Tipo inválido');

  if(empty($_FILES['file'])) throw new Exception('Archivo no recibido');
  $f = $_FILES['file'];
  if($f['error'] !== UPLOAD_ERR_OK) throw new Exception('Error de subida: '.$f['error']);

  // Detectar MIME real
  $finfo = finfo_open(FILEINFO_MIME_TYPE);
  $mime  = finfo_file($finfo, $f['tmp_name']);
  finfo_close($finfo);

  $allowedImg = ['image/jpeg','image/png','image/webp'];
  $allowedVid = ['video/mp4','video/webm'];

  if($tipo==='imagen' && !in_array($mime,$allowedImg)) throw new Exception('Formato de imagen no permitido');
  if(($tipo==='video_m'||$tipo==='video_s') && !in_array($mime,$allowedVid)) throw new Exception('Formato de video no permitido');

  $maxImg = 3*1024*1024; $maxVid = 50*1024*1024;
  if($tipo==='imagen' && $f['size']>$maxImg) throw new Exception('La imagen supera 3MB');
  if(($tipo==='video_m'||$tipo==='video_s') && $f['size']>$maxVid) throw new Exception('El video supera 50MB');

  // Rutas reales
  $root = $_SERVER['DOCUMENT_ROOT'] ?? dirname(__DIR__,2);

  if($tipo==='imagen'){
    $destDir = $root.'/productos/imgs/';
    $relDir  = '/productos/imgs/';
    $ext = '';
    switch ($mime) {
        case 'image/jpeg': $ext = '.jpg'; break;
        case 'image/png':  $ext = '.png'; break;
        case 'image/webp': $ext = '.webp'; break;
        default: $ext = '';
    }

  } else {
    $destDir = $root.'/productos/video/';
    $relDir  = '/productos/video/';
    $ext = '';
    switch ($mime) {
        case 'video/mp4':  $ext = '.mp4'; break;
        case 'video/webm': $ext = '.webm'; break;
        default: $ext = '';
    }
  }

  if(!is_dir($destDir)){
    if(!mkdir($destDir,0755,true)) throw new Exception('No se pudo crear el directorio destino');
  }

  // ====== IMAGEN ======
  if($tipo==='imagen'){
    $filename = 'img-'.substr(sha1(uniqid('',true)),0,10).$ext;
    if(!move_uploaded_file($f['tmp_name'],$destDir.$filename)) throw new Exception('No se pudo mover la imagen');

    $resp['ok']=true;
    $resp['filename']=$filename;
    $resp['db_name']=$filename; // para guardar en BD si lo deseas
    $resp['url']=$relDir.$filename;

    // (Opcional) guardar en BD al vuelo
    /*
    if(isset($_POST['idproducto'])){
      $id = intval($_POST['idproducto']);
      if($id>0){
        $stmt = $mysqli->prepare("UPDATE z_productos SET imagen=? WHERE id=? LIMIT 1");
        $stmt->bind_param("si", $filename, $id);
        $stmt->execute();
      }
    }
    */

    echo json_encode($resp); exit;
  }

  // ====== VIDEOS: un solo nombre base en BD (db_name = "<base>.<ext>") ======
  $db_name = $_POST['db_name'] ?? ''; // si ya existe en BD, viene sin prefijos
  if($db_name){
    // validar patrón y forzar extensión a la del archivo subido
    if(!preg_match('/^[a-z0-9\-\_]+\.(mp4|webm)$/i',$db_name)) throw new Exception('db_name inválido');
    $base = pathinfo($db_name, PATHINFO_FILENAME);
    $db_name = $base.$ext; // normaliza extensión al upload actual
  } else {
    $base = 'vid-'.substr(sha1(uniqid('',true)),0,10);
    $db_name = $base.$ext; // p.e. vid-abcd1234.mp4
  }

  // Prefijo según tipo
  $prefix = ($tipo==='video_m') ? 'm-' : 's-';
  $filename = $prefix.$db_name; // m-<base>.<ext> o s-<base>.<ext>

  if(!move_uploaded_file($f['tmp_name'],$destDir.$filename)) throw new Exception('No se pudo mover el video');

  $resp['ok']=true;
  $resp['filename']=$filename;     // físico con prefijo
  $resp['db_name']=$db_name;       // para BD sin prefijo
  $resp['url']=$relDir.$filename;

  // (Opcional) guardar en BD al vuelo (campo 'video' UNA sola vez)
  /*
  if(isset($_POST['idproducto'])){
    $id = intval($_POST['idproducto']);
    if($id>0){
      $stmt = $mysqli->prepare("UPDATE z_productos SET video=? WHERE id=? LIMIT 1");
      $stmt->bind_param("si", $db_name, $id);
      $stmt->execute();
    }
  }
  */

  echo json_encode($resp); exit;

}catch(Exception $e){
  echo json_encode(['ok'=>false,'msg'=>$e->getMessage()]); exit;
}
