<?php
namespace App\Entity\FielpetPol;
use Doctrine\ORM\Mapping as ORM;
/**
* TicketAdjunto
*
* @ORM\Table(name="ticket_adjunto")
* @ORM\Entity(repositoryClass="App\Repository\FielpetPol\TicketAdjuntoRepository")
*/
class TicketAdjunto
{
/**
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/** @ORM\Column(name="nombre_original", type="string", length=255, nullable=false) */
private $nombreOriginal;
/** @ORM\Column(name="mime_type", type="string", length=100, nullable=false) */
private $mimeType;
/** @ORM\Column(name="tamanio", type="integer", nullable=false) */
private $tamanio;
/**
* Contenido del archivo codificado en base64.
* length=16777215 → Doctrine lo mapea a MEDIUMTEXT en MySQL (~16MB, ~12MB de archivo real).
*
* @ORM\Column(name="contenido_base64", type="text", length=16777215, nullable=false)
*/
private $contenidoBase64;
/** @ORM\Column(name="fecha_creacion", type="datetime", nullable=false) */
private $fechaCreacion;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\FielpetPol\Ticket")
* @ORM\JoinColumn(name="ticket_id", referencedColumnName="id", nullable=false)
*/
private $ticket;
/**
* Null si es un adjunto del ticket (creación/edición). Si viene de un comentario, se linkea acá.
*
* @ORM\ManyToOne(targetEntity="App\Entity\FielpetPol\TicketRespuesta")
* @ORM\JoinColumn(name="ticket_respuesta_id", referencedColumnName="id", nullable=true, onDelete="CASCADE")
*/
private $ticketRespuesta;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\FielpetPol\Usuario")
* @ORM\JoinColumn(name="usuario_id", referencedColumnName="id", nullable=false)
*/
private $usuario;
public function __construct()
{
$this->fechaCreacion = new \DateTime();
}
public function getId(): ?int { return $this->id; }
public function getNombreOriginal(): ?string { return $this->nombreOriginal; }
public function setNombreOriginal(string $v): static { $this->nombreOriginal = $v; return $this; }
public function getMimeType(): ?string { return $this->mimeType; }
public function setMimeType(string $v): static { $this->mimeType = $v; return $this; }
public function getTamanio(): ?int { return $this->tamanio; }
public function setTamanio(int $v): static { $this->tamanio = $v; return $this; }
public function getContenidoBase64(): ?string { return $this->contenidoBase64; }
public function setContenidoBase64(string $v): static { $this->contenidoBase64 = $v; return $this; }
public function getFechaCreacion(): ?\DateTimeInterface { return $this->fechaCreacion; }
public function setFechaCreacion(\DateTimeInterface $v): static { $this->fechaCreacion = $v; return $this; }
public function getTicket(): ?Ticket { return $this->ticket; }
public function setTicket(?Ticket $v): static { $this->ticket = $v; return $this; }
public function getTicketRespuesta(): ?TicketRespuesta { return $this->ticketRespuesta; }
public function setTicketRespuesta(?TicketRespuesta $v): static { $this->ticketRespuesta = $v; return $this; }
public function getUsuario(): ?Usuario { return $this->usuario; }
public function setUsuario(?Usuario $v): static { $this->usuario = $v; return $this; }
public function getTamanioFormateado(): string
{
$b = $this->tamanio;
if ($b >= 1048576) return round($b / 1048576, 1) . ' MB';
if ($b >= 1024) return round($b / 1024, 1) . ' KB';
return $b . ' B';
}
public function isImagen(): bool
{
return in_array($this->mimeType, [
'image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/svg+xml'
], true);
}
}