<?php

namespace Database\Seeders;

use App\Models\PoliticalParty;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Storage;

class PoliticalPartySeeder extends Seeder
{
    public function run(): void
    {
        $parties = [
            ['name' => 'Ahora Nación',                'acronym' => 'AN',     'color' => '#1E3A5F'],
            ['name' => 'Alianza para el Progreso',     'acronym' => 'APP',    'color' => '#00A859'],
            ['name' => 'Avanza País',                  'acronym' => 'AVPAIS', 'color' => '#FF6B00'],
            ['name' => 'Cooperación Popular',          'acronym' => 'CP',     'color' => '#8B4513'],
            ['name' => 'Fe en el Perú',                'acronym' => 'FEP',    'color' => '#DAA520'],
            ['name' => 'Frente de la Esperanza',       'acronym' => 'FDLE',   'color' => '#2E8B57'],
            ['name' => 'Fuerza Popular',               'acronym' => 'FP',     'color' => '#FF6600'],
            ['name' => 'Fuerza y Libertad',            'acronym' => 'FYL',    'color' => '#003366'],
            ['name' => 'Integridad Democrática',       'acronym' => 'ID',     'color' => '#4169E1'],
            ['name' => 'Juntos por el Perú',           'acronym' => 'JP',     'color' => '#8B0000'],
            ['name' => 'Libertad Popular',             'acronym' => 'LP',     'color' => '#4682B4'],
            ['name' => 'País para Todos',              'acronym' => 'PPT',    'color' => '#228B22'],
            ['name' => 'Partido Aprista Peruano',      'acronym' => 'APRA',   'color' => '#DC143C'],
            ['name' => 'Partido Cívico OBRAS',         'acronym' => 'OBRAS',  'color' => '#FF4500'],
            ['name' => 'Partido del Buen Gobierno',    'acronym' => 'PBG',    'color' => '#006400'],
            ['name' => 'Partido Demócrata Unido Perú', 'acronym' => 'PDUP',   'color' => '#191970'],
            ['name' => 'Partido Demócrata Verde',      'acronym' => 'PDV',    'color' => '#32CD32'],
            ['name' => 'Partido Democrático Federal',  'acronym' => 'PDF',    'color' => '#4B0082'],
            ['name' => 'Partido Morado',               'acronym' => 'PM',     'color' => '#7B2D8E'],
            ['name' => 'Partido Patriótico del Perú',  'acronym' => 'PPP',    'color' => '#B22222'],
            ['name' => 'Partido PRIN',                 'acronym' => 'PRIN',   'color' => '#5F9EA0'],
            ['name' => 'Partido SíCreo',               'acronym' => 'SICREO', 'color' => '#FF8C00'],
            ['name' => 'Perú Acción',                  'acronym' => 'PA',     'color' => '#CD853F'],
            ['name' => 'Perú Libre',                   'acronym' => 'PL',     'color' => '#8B0000'],
            ['name' => 'Perú Primero',                 'acronym' => 'P1',     'color' => '#1C1C1C'],
            ['name' => 'Perú Moderno',                 'acronym' => 'PMOD',   'color' => '#0077B6'],
            ['name' => 'Podemos Perú',                 'acronym' => 'PP',     'color' => '#00CED1'],
            ['name' => 'Primero la Gente',             'acronym' => 'PLG',    'color' => '#C71585'],
            ['name' => 'Progresemos',                  'acronym' => 'PROG',   'color' => '#20B2AA'],
            ['name' => 'Renovación Popular',           'acronym' => 'RP',     'color' => '#0000CD'],
            ['name' => 'Salvemos al Perú',             'acronym' => 'SAP',    'color' => '#FF1493'],
            ['name' => 'Somos Perú',                   'acronym' => 'SP',     'color' => '#FFD700'],
            ['name' => 'Un Camino Diferente',          'acronym' => 'UCD',    'color' => '#2F4F4F'],
            ['name' => 'Unidad Nacional',              'acronym' => 'UN',     'color' => '#8B008B'],
            ['name' => 'Venceremos',                   'acronym' => 'VEN',    'color' => '#800000'],
        ];

        Storage::disk('public')->makeDirectory('parties');

        foreach ($parties as $partyData) {
            $logoPath = $this->generateLogo($partyData['acronym'], $partyData['color']);

            PoliticalParty::withTrashed()->updateOrCreate(
                ['acronym' => $partyData['acronym']],
                ['name' => $partyData['name'], 'logo' => $logoPath, 'deleted_at' => null]
            );
        }
    }

    /**
     * Genera un logo PNG con el acrónimo del partido sobre un fondo de color.
     */
    private function generateLogo(string $acronym, string $hexColor): string
    {
        $size = 200;
        $img = imagecreatetruecolor($size, $size);
        imagesavealpha($img, true);

        // Fondo transparente
        $transparent = imagecolorallocatealpha($img, 0, 0, 0, 127);
        imagefill($img, 0, 0, $transparent);

        // Color del partido
        [$r, $g, $b] = sscanf($hexColor, '#%02x%02x%02x');
        $bgColor = imagecolorallocate($img, $r, $g, $b);
        $white = imagecolorallocate($img, 255, 255, 255);

        // Círculo de fondo
        imagefilledellipse($img, $size / 2, $size / 2, $size - 10, $size - 10, $bgColor);

        // Borde blanco
        imageellipse($img, $size / 2, $size / 2, $size - 10, $size - 10, $white);

        // Texto centrado
        $fontSize = strlen($acronym) <= 3 ? 5 : 4;
        $textWidth = imagefontwidth($fontSize) * strlen($acronym);
        $textHeight = imagefontheight($fontSize);
        $x = ($size - $textWidth) / 2;
        $y = ($size - $textHeight) / 2;
        imagestring($img, $fontSize, (int) $x, (int) $y, $acronym, $white);

        // Guardar en storage
        $filename = 'parties/' . strtolower($acronym) . '.png';
        $fullPath = storage_path('app/public/' . $filename);

        imagepng($img, $fullPath);
        imagedestroy($img);

        return $filename;
    }
}
