<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\Products\Product;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;

class ProductSeeder extends Seeder
{
    public function run(): void
    {
        // =========================
        // 1. THEME FRESK
        // =========================
        $this->ensureImageInStorage('images_static/products/fresk.svg');
        Product::updateOrCreate(
            ['slug' => 'theme_fresk'],
            [
                'name'        => 'Theme Fresk',
                'summary'     => 'Tema moderno para Moodle desarrollado por Tresipunt.',
                'description' => 'Un tema visualmente moderno, responsive y optimizado para Moodle 4.x, con componentes personalizables y soporte para branding institucional.',
                'tech'        => 'moodle',
                'type'        => 'theme',
                'metadata'    => [
                    'component'   => 'theme_fresk',
                    'min_moodle'  => '4.0',
                ],
                'actived'  => true,
                'enabled'  => true,
                'image'     => 'images_static/products/fresk.svg',
            ]
        );

        // =========================
        // 2. LOCAL TRESIPUNT SMATX
        // =========================
        $this->ensureImageInStorage('images_static/products/smatx-moodle.svg');
        Product::updateOrCreate(
            ['slug' => 'local_tresipuntsmatx'],
            [
                'name'        => 'Local Tresipunt SMATX',
                'summary'     => 'Integración SMATX para plataformas Moodle.',
                'description' => 'Plugin local que integra Moodle con SMATX, permitiendo sincronización de datos, automatización y servicios externos.',
                'tech'        => 'moodle',
                'type'        => 'local',
                'metadata'    => [
                    'component'   => 'local_tresipuntsmatx',
                    'min_moodle'  => '4.0',
                ],
                'actived'  => true,
                'enabled'  => true,
                'image'     => 'images_static/products/smatx-moodle.svg',
            ]
        );

        // =========================
        // 3. REPORT FUNDAE
        // =========================
        $this->ensureImageInStorage('images_static/products/fundae.svg');
        Product::updateOrCreate(
            ['slug' => 'report_fundae'],
            [
                'name'        => 'Report Fundae',
                'summary'     => 'Informe oficial Fundae para plataformas Moodle.',
                'description' => 'Generación de informes Fundae conforme a los requisitos oficiales, integrando datos de cursos, usuarios y finalización en Moodle.',
                'tech'        => 'moodle',
                'type'        => 'report',
                'metadata'    => [
                    'component'   => 'report_fundae',
                    'min_moodle'  => '4.0',
                ],
                'actived'  => true,
                'enabled'  => true,
                'image'     => 'images_static/products/fundae.svg',
            ]
        );

        // =========================
        // 4. BLOCK TRESIPUNT SEPE
        // =========================
        $this->ensureImageInStorage('images_static/products/sepe.svg');
        Product::updateOrCreate(
            ['slug' => 'block_tresipuntsepe'],
            [
                'name'        => 'Block Tresipunt SEPE',
                'summary'     => 'Bloque SEPE para gestión de datos y validación.',
                'description' => 'Bloque de Moodle que integra la comunicación con el SEPE, validación de datos, formularios y servicios SOAP adaptados a la normativa.',
                'tech'        => 'moodle',
                'type'        => 'block',
                'metadata'    => [
                    'component'   => 'block_tresipuntsepe',
                    'min_moodle'  => '4.1',
                ],
                'actived'  => true,
                'enabled'  => true,
                'image'     => 'images_static/products/sepe.svg',
            ]
        );

        // =========================
        // 5. LOCAL COURSEAI
        // =========================
        $this->ensureImageInStorage('images_static/products/course-ai.svg');
        Product::updateOrCreate(
            ['slug' => 'local_courseai'],
            [
                'name'        => 'Local CourseAI',
                'summary'     => 'Plugin de IA para generación de contenido y soporte docente.',
                'description' => 'Plugin local para Moodle que incorpora servicios de IA para la creación de contenido, retroalimentación, análisis y soporte a profesores.',
                'tech'        => 'moodle',
                'type'        => 'local',
                'metadata'    => [
                    'component'   => 'local_courseai',
                    'min_moodle'  => '4.1',
                ],
                'actived'  => true,
                'enabled'  => true,
                'image'     => 'images_static/products/course-ai.svg',
            ]
        );
    }

    /**
     * Asegura que la imagen existe en storage
     * Si existe en public pero no en storage, la copia
     */
    private function ensureImageInStorage(string $imagePath): void
    {
        $publicPath = public_path($imagePath);

        // Si existe en public pero no en storage, copiarla
        if (File::exists($publicPath) && !Storage::disk('public')->exists($imagePath)) {
            Storage::disk('public')->makeDirectory(dirname($imagePath));
            Storage::disk('public')->put($imagePath, File::get($publicPath));
        }
    }
}
