<?php

namespace App\Http\Controllers;

use App\Models\Admin\Interna;
use Illuminate\Contracts\View\View;

class TestViewsController extends Controller
{
    /**
     * @var array<int, array<string, int|string>>
     */
    private const DIFFUSION_MODULES = [
        [
            'id' => 13,
            'difusion_id' => 20,
            'modulo_type' => 'App\Models\Admin\Interna',
            'modulo_id' => 1,
            'orden' => 1,
        ],
        [
            'id' => 14,
            'difusion_id' => 20,
            'modulo_type' => 'App\Models\Promociones',
            'modulo_id' => 5,
            'orden' => 2,
        ],
        [
            'id' => 15,
            'difusion_id' => 20,
            'modulo_type' => 'App\Models\Promociones',
            'modulo_id' => 4,
            'orden' => 3,
        ],
    ];

    /**
     * Vista manual de prueba para el mail de postulantes.
     */
    public function email(): View
    {
        $nombre = 'José';
        $apellido = 'Argüello';
        $telefono = '0981920088';
        $correo = 'ponsi@gmail.com';
        $mensaje = 'No se andaba de onda nomas, el tema es que no se, no funciona el texto por eso escribo este mensaje, hepy la combustible kp.';

        return view('mail.posulantes.admin', compact(
            'nombre',
            'apellido',
            'telefono',
            'correo',
            'mensaje'
        ));
    }

    /**
     * Vista manual de prueba para el mail de difusión. La selección de módulos
     * queda local a este controlador para no dejar lógica de armado en rutas.
     */
    public function difusion(): View
    {
        $nombre = 'José';
        $telefono = '0981920088';
        $correo = 'jose@gmail.com';
        $mensaje = 'No se andaba de onda nomas, el tema es que no se, no funciona el texto por eso escribo este mensaje, hepy la combustible kp.';

        $interna = Interna::selectFillableAnd(['id as image_large_getter'])
            ->orderBy('id', 'desc')
            ->first();

        if ($interna) {
            $interna->imagen = $interna->image_large;
            $interna->enlace = asset("interna/novedades/{$interna->id}/{$interna->slug}");
        }

        $internas = $this->buildDifusionModules();

        return view('mail.difusion.cliente', compact(
            'nombre',
            'correo',
            'internas'
        ));
    }

    /**
     * @return array<int, object>
     */
    private function buildDifusionModules(): array
    {
        $internas = [];

        foreach (self::DIFFUSION_MODULES as $item) {
            $class = (string) $item['modulo_type'];
            $data = (new $class)
                ->where('id', (int) $item['modulo_id'])
                ->first();

            if (!$data) {
                continue;
            }

            $data->enlace = $data->enlace();
            $data->imagen = $data->imagen('large');
            $data->descripcion = limitar_cadena(htmlToPlainText($data->descripcion), 200);
            $internas[] = $data;
        }

        return $internas;
    }
}
