<?php

namespace App\Livewire\Traits;

use App\Livewire\Products\DuplicarVersionModal;
use App\Support\TiposDeContenido;

/**
 * «Duplicar como nueva» desde la ficha de una versión, con la misma modal que el listado.
 *
 * **Antes eran dos caminos.** El listado abría `DuplicarVersionModal`, que enseña el número
 * de la versión nueva, deja cambiarlo y dice a cuántos entornos les llegaría. La ficha hacía
 * un `confirm()` del navegador y llamaba a `duplicate()` sin número: la versión nueva salía
 * con el siguiente y no se veía hasta después de crearla. El número es justo lo que decide a
 * quién le llega, así que la ficha se saltaba lo único que la modal vino a enseñar
 * (PRODSECU-198, cierre).
 *
 * Lo usan las dos fichas, `MuestraVersionDeElementos` y `MuestraVersionDeArchivos`. El tipo
 * sale de la `clave` de `fichaDeLaVersion()`.
 */
trait DuplicaLaVersionDeLaFicha
{
    public function pedirDuplicarEstaVersion(): void
    {
        $ficha = $this->fichaDeLaVersion();

        $this->authorize(TiposDeContenido::TIPOS[$ficha['clave']]['permisoEscritura']);

        $this->dispatch('openModal',
            component: DuplicarVersionModal::class,
            arguments: [
                'tipo' => $ficha['clave'],
                'productId' => $this->product->id,
                'versionId' => $ficha['version']->id,
                'irALaNueva' => true,
            ]
        );
    }
}
