<?php

declare(strict_types=1);

namespace Database\Seeders;

use App\Models\Category;
use App\Models\Post;
use App\Models\Tag;
use App\Models\User;
use Database\Seeders\Support\SeederImageDownloader;
use Illuminate\Database\Seeder;
use Illuminate\Support\Str;

class PostsTableSeeder extends Seeder
{
    public function run(): void
    {
        $admin = User::role('admin')->first();
        $writer = User::query()->where('email', 'writer@rievo.ir')->first();

        if (! $admin) {
            return;
        }

        $posts = [
            [
                'title' => 'راهنمای نگهداری گاو شیری',
                'desc' => 'در این مقاله به بررسی اصول صحیح نگهداری گاو شیری، از جمله تغذیه، جایگاه و بهداشت می‌پردازیم.',
                'category' => 'cattle',
                'tags' => ['dairy-cattle', 'animal-feed'],
                'featured' => true,
                'image_url' => 'https://images.unsplash.com/photo-1546445317-29d40fe740e9?auto=format&fit=crop&w=1200&q=80',
                'fallback_image' => 'files/gav.jpg',
                'gallery_urls' => [
                    'https://images.unsplash.com/photo-1500595046743-ce010655d5cb?auto=format&fit=crop&w=1200&q=80',
                    'https://images.unsplash.com/photo-1560493676-04071c5f467d?auto=format&fit=crop&w=1200&q=80',
                ],
                'fallback_gallery' => ['files/gav-1.jpg', 'files/gav-2.jpg'],
            ],
            [
                'title' => 'اصول پرواربندی گوسفند',
                'desc' => 'پرواربندی گوسفند یکی از فعالیت‌های سودآور در حوزه دامپروری است. در این مطلب اصول آن را بررسی می‌کنیم.',
                'category' => 'sheep',
                'tags' => ['sheep', 'fattening'],
                'featured' => false,
                'image_url' => 'https://images.unsplash.com/photo-1484550618854-1f25a1d7a63e?auto=format&fit=crop&w=1200&q=80',
                'fallback_image' => 'files/goosfand.jpg',
                'gallery_urls' => [
                    'https://images.unsplash.com/photo-1516737768806-669fd2849fc1?auto=format&fit=crop&w=1200&q=80',
                ],
                'fallback_gallery' => ['files/goosfand-1.jpg'],
            ],
            [
                'title' => 'بیماری‌های شایع دام و راه‌های پیشگیری',
                'desc' => 'شناخت بیماری‌های شایع دام و واکسیناسیون به موقع از ضروریات هر واحد دامپروری است.',
                'category' => 'vet-services',
                'tags' => ['veterinary'],
                'featured' => false,
                'image_url' => 'https://images.unsplash.com/photo-1562962230-4e2d48948197?auto=format&fit=crop&w=1200&q=80',
                'fallback_image' => 'files/gavo-goosfand-baham.jpg',
                'gallery_urls' => [
                    'https://images.unsplash.com/photo-1576201836106-db1758fd1c97?auto=format&fit=crop&w=1200&q=80',
                ],
                'fallback_gallery' => ['files/gavo-goosfand-baham-1.jpg'],
            ],
            [
                'title' => 'تغذیه بهینه دام در فصل‌های مختلف',
                'desc' => 'جیره‌نویسی مناسب با توجه به فصل و شرایط اقلیمی تاثیر مستقیم بر تولید و سلامت دام دارد.',
                'category' => 'animal-feed',
                'tags' => ['animal-feed', 'dairy-cattle'],
                'featured' => false,
                'image_url' => 'https://images.unsplash.com/photo-1628009368237-c69b9f0c43a8?auto=format&fit=crop&w=1200&q=80',
                'fallback_image' => 'files/gav-4.jpg',
                'gallery_urls' => [
                    'https://images.unsplash.com/photo-1625246333195-78d9c38ad449?auto=format&fit=crop&w=1200&q=80',
                ],
                'fallback_gallery' => ['files/gav-5.jpg'],
            ],
            [
                'title' => 'آشنایی با نژادهای گوسفند ایرانی',
                'desc' => 'ایران دارای نژادهای متنوع گوسفند از جمله افشاری، ماکویی و بختیاری است که هر کدام ویژگی‌های خاص خود را دارند.',
                'category' => 'sheep',
                'tags' => ['sheep'],
                'featured' => false,
                'image_url' => 'https://images.unsplash.com/photo-1583337130417-3346a1be7dee?auto=format&fit=crop&w=1200&q=80',
                'fallback_image' => 'files/goosfand-2.jpg',
                'gallery_urls' => [
                    'https://images.unsplash.com/photo-1452579323066-4d2927a58d90?auto=format&fit=crop&w=1200&q=80',
                ],
                'fallback_gallery' => ['files/goosfand-3.jpg'],
            ],
        ];

        foreach ($posts as $index => $data) {
            $slug = Str::slug($data['title']);
            $coverPath = SeederImageDownloader::ensure(
                "files/posts/{$slug}-cover.jpg",
                $data['image_url'],
                $data['fallback_image'] ?? null
            );

            $gallery = [];
            foreach ($data['gallery_urls'] as $galleryIndex => $galleryUrl) {
                $gallery[] = SeederImageDownloader::ensure(
                    "files/posts/{$slug}-gallery-{$galleryIndex}.jpg",
                    $galleryUrl,
                    $data['fallback_gallery'][$galleryIndex] ?? null
                );
            }

            $post = Post::updateOrCreate(
                ['slug' => $slug],
                [
                    'title' => $data['title'],
                    'desc' => $data['desc'],
                    'excerpt' => Str::limit(strip_tags($data['desc']), 160),
                    'time_to_read' => random_int(3, 8),
                    'is_featured' => $data['featured'],
                    'created_by' => $admin->id,
                    'author_id' => ($index % 2 === 0 ? $admin : ($writer ?? $admin))->id,
                    'views' => random_int(100, 5000),
                    'status' => 13,
                    'publish_at' => now()->subDays(10 - $index),
                    'image' => $coverPath,
                    'gallery' => $gallery,
                ]
            );

            $category = Category::where('slug', $data['category'])->first();
            if ($category) {
                $post->categories()->syncWithoutDetaching([$category->id => ['model_type' => Post::class]]);
            }

            $tags = Tag::whereIn('slug', $data['tags'])->pluck('id');
            if ($tags->isNotEmpty()) {
                $post->tags()->syncWithoutDetaching($tags);
            }
        }
    }
}
