<?php
// upload_embed_img.php
include 'sesion.php';
include 'concha.php';

@ini_set('display_errors', '0');
error_reporting(E_ALL);

header('Content-Type: application/json; charset=utf-8');

function out_json($ok, $arr = []) {
  echo json_encode(array_merge(['ok' => (bool)$ok], $arr));
  exit;
}

if (!isset($_FILES['file']) || !is_uploaded_file($_FILES['file']['tmp_name'])) {
  out_json(false, ['error' => 'No se recibió el archivo.']);
}

$f = $_FILES['file'];
if (!empty($f['error'])) {
  out_json(false, ['error' => 'Error subiendo archivo (code '.$f['error'].').']);
}

$max_mb = 15;
if ($f['size'] > ($max_mb * 1024 * 1024)) {
  out_json(false, ['error' => 'La imagen supera '.$max_mb.'MB.']);
}

if (!function_exists('imagecreatefromjpeg')) {
  out_json(false, ['error' => 'GD no está habilitado en el servidor (no se puede convertir a JPG).']);
}

$info = @getimagesize($f['tmp_name']);
if ($info === false) {
  out_json(false, ['error' => 'El archivo no es una imagen válida.']);
}

$mime = isset($info['mime']) ? strtolower($info['mime']) : '';
$src_img = null;

switch ($mime) {
  case 'image/jpeg':
    $src_img = @imagecreatefromjpeg($f['tmp_name']);
    break;
  case 'image/png':
    $src_img = @imagecreatefrompng($f['tmp_name']);
    break;
  case 'image/gif':
    $src_img = @imagecreatefromgif($f['tmp_name']);
    break;
  case 'image/webp':
    if (function_exists('imagecreatefromwebp')) {
      $src_img = @imagecreatefromwebp($f['tmp_name']);
    }
    break;
  default:
    $src_img = null;
}

if (!$src_img) {
  out_json(false, ['error' => 'Formato no permitido o no soportado. Usá JPG/PNG/GIF/WebP.']);
}

// Carpeta destino: public_html/MM-AAAA
$folder = date('m-Y'); // MM-AAAA
$docroot = rtrim((string)$_SERVER['DOCUMENT_ROOT'], '/');
if ($docroot === '') {
  imagedestroy($src_img);
  out_json(false, ['error' => 'No se pudo detectar DOCUMENT_ROOT.']);
}

$abs_dir = $docroot . '/' . $folder;

if (!is_dir($abs_dir)) {
  if (!@mkdir($abs_dir, 0755, true)) {
    imagedestroy($src_img);
    out_json(false, ['error' => 'No se pudo crear la carpeta '.$folder.'.']);
  }
}

// Nombre: foto_subida_convertida__md5.jpg
$md5 = @md5_file($f['tmp_name']);
if (!$md5) $md5 = md5(uniqid('', true));

$filename = 'foto_subida_convertida__' . $md5 . '.jpg';
$dest_abs = $abs_dir . '/' . $filename;

// Convertir a truecolor y fondo blanco (por transparencias PNG/GIF)
$w = imagesx($src_img);
$h = imagesy($src_img);

$dst = imagecreatetruecolor($w, $h);
$white = imagecolorallocate($dst, 255, 255, 255);
imagefilledrectangle($dst, 0, 0, $w, $h, $white);
imagecopy($dst, $src_img, 0, 0, 0, 0, $w, $h);

$quality = 85;
if (!@imagejpeg($dst, $dest_abs, $quality)) {
  imagedestroy($src_img);
  imagedestroy($dst);
  out_json(false, ['error' => 'No se pudo guardar el JPG en '.$folder.'.']);
}

@chmod($dest_abs, 0644);
imagedestroy($src_img);
imagedestroy($dst);

// URL pública
$dom_final = isset($dom) && $dom ? rtrim($dom, '/') : '';
if ($dom_final === '') {
  $scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
  $host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '';
  $dom_final = $scheme . '://' . $host;
}

$url = $dom_final . '/' . $folder . '/' . $filename;

out_json(true, ['url' => $url]);