<?php

namespace Database\Seeders;

use App\Models\Article;
use Illuminate\Database\Seeder;
use Illuminate\Support\Str;

class FixSlugsSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $this->command->info('Starting slug cleanup...');

        $list = [
            ['id' => 489, 'slug' => 'ここが凄いよベトナム人開発者！', 'result' => ''],
            ['id' => 4319, 'slug' => '【dxプラットフォームのメリットとは？】dx推進に', 'result' => 'dxdx'],
            ['id' => 5123, 'slug' => '【wordpress-テンプレート】テンプレートファイルの作成', 'result' => 'wordpress'],
            ['id' => 5648, 'slug' => '【rfpとは】rfpを作成するメリットやrfpの作り方につい', 'result' => 'rfprfprfp'],
            ['id' => 5683, 'slug' => '【ソフトウェア開発会社】ソフトウェア開発とは', 'result' => '-1'],
            ['id' => 5712, 'slug' => '【システム開発-相場】システム開発の相場を知ろ', 'result' => '-2'],
            ['id' => 5744, 'slug' => '【python-iphoneアプリ（ios）】pythonでiphone（ios）アプリを作ろう！', 'result' => 'python-iphoneiospythoniphoneios'],
            ['id' => 5750, 'slug' => '【在庫管理アプリ】在庫管理アプリを導入するメ', 'result' => '-3'],
            ['id' => 5791, 'slug' => '【給与計算システム】給与計算システムを導入す', 'result' => '-4'],
            ['id' => 5846, 'slug' => '【xmind】xmindとは？活用するメリットから使い方まで初', 'result' => 'xmindxmind'],
            ['id' => 5879, 'slug' => '【figma】初心者必見！figmaの使い方を徹底解説！活用す', 'result' => 'figmafigma'],
            ['id' => 11837, 'slug' => '2025年最新【顧客管理システム開発完全ガイド】満', 'result' => '2025'],
            ['id' => 20059, 'slug' => 'https-kaeru-dx-co-jp-modern-excel-使い方-power-query-pivot-bi', 'result' => 'https-kaeru-dx-co-jp-modern-excel-power-query-pivot-bi'],
            ['id' => 20683, 'slug' => 'microsoft-teams-ai-chatbot-活用術', 'result' => 'microsoft-teams-ai-chatbot'],
            ['id' => 21258, 'slug' => 'こベトナムオフショア開発-mattock', 'result' => 'mattock'],
            ['id' => 21267, 'slug' => 'kaeru-dx-jp-inquiry-peak-対策-ai', 'result' => 'kaeru-dx-jp-inquiry-peak-ai'],
            ['id' => 22073, 'slug' => '/knowledge-sharing-efficiency-dx', 'result' => 'knowledge-sharing-efficiency-dx'],
            ['id' => 22075, 'slug' => '2https://example.com/staffing-shortage-ai-dx-solution025ai', 'result' => '2httpsexamplecomstaffing-shortage-ai-dx-solution025ai'],
            ['id' => 22076, 'slug' => '/customer-support-cost-reduction-ai-automation', 'result' => 'customer-support-cost-reduction-ai-automation'],
            ['id' => 22077, 'slug' => '/24hour-support-cost-reduction-ai-chatbot-2025/', 'result' => '24hour-support-cost-reduction-ai-chatbot-2025'],
            ['id' => 22080, 'slug' => '/crm-ai-customer-history-efficiency', 'result' => 'crm-ai-customer-history-efficiency'],
            ['id' => 22081, 'slug' => '/crm-efficiency-sales-up-2025', 'result' => 'crm-efficiency-sales-up-2025'],
            ['id' => 22082, 'slug' => '/ticket-management-efficiency-2025', 'result' => 'ticket-management-efficiency-2025'],
            ['id' => 22083, 'slug' => 'kaeru-dx.com/ai-teikei-kaitou-efficiency', 'result' => 'kaeru-dxcomai-teikei-kaitou-efficiency'],
            ['id' => 22085, 'slug' => '/jidouhenshin-chatbot-ai-kokyaku-taiou', 'result' => 'jidouhenshin-chatbot-ai-kokyaku-taiou'],
            ['id' => 22086, 'slug' => '/workflow-efficiency-bpm-rpa-2025', 'result' => 'workflow-efficiency-bpm-rpa-2025'],
            ['id' => 22087, 'slug' => '/outsourcing-cost-reduction-2025', 'result' => 'outsourcing-cost-reduction-2025'],
            ['id' => 22088, 'slug' => 'https://kaeru-dx.com/telephone-cost-reduction-voip-cloud-pbx-2025/', 'result' => 'httpskaeru-dxcomtelephone-cost-reduction-voip-cloud-pbx-2025'],
            ['id' => 22089, 'slug' => '/support-cost-reduction-2025/', 'result' => 'support-cost-reduction-2025'],
            ['id' => 22090, 'slug' => '/customer-support-cost-reduction-2025/', 'result' => 'customer-support-cost-reduction-2025'],
            ['id' => 22091, 'slug' => '/customer-support-cost-reduction-digital-transformation/', 'result' => 'customer-support-cost-reduction-digital-transformation'],
            ['id' => 22092, 'slug' => '/complaint-cost-reduction-2025/', 'result' => 'complaint-cost-reduction-2025'],
            ['id' => 22093, 'slug' => '/email-chat-cost-reduction-ai-automation-2025', 'result' => 'email-chat-cost-reduction-ai-automation-2025'],
            ['id' => 22094, 'slug' => '/chat-cost-reduction-ai-automation-2025/', 'result' => 'chat-cost-reduction-ai-automation-2025'],
            ['id' => 22095, 'slug' => '/holiday-night-support-cost-reduction-ai-automation-2025/', 'result' => 'holiday-night-support-cost-reduction-ai-automation-2025'],
            ['id' => 22096, 'slug' => '/gyomu-process-kouritsuka-bpr-ai-2025', 'result' => 'gyomu-process-kouritsuka-bpr-ai-2025'],
            ['id' => 22097, 'slug' => '/escalation-flow-efficiency-ai', 'result' => 'escalation-flow-efficiency-ai'],
            ['id' => 22098, 'slug' => '/ai-agent-chatbot-difference-2025/', 'result' => 'ai-agent-chatbot-difference-2025'],
            ['id' => 22100, 'slug' => '/ai-chat-guide-2025/', 'result' => 'ai-chat-guide-2025'],
            ['id' => 22102, 'slug' => '/multilingual-ai-chatbot-global-business/', 'result' => 'multilingual-ai-chatbot-global-business'],
            ['id' => 22103, 'slug' => '/multilingual-ai-chatbot-global-business-guide-2025/', 'result' => 'multilingual-ai-chatbot-global-business-guide-2025'],
            ['id' => 22104, 'slug' => '/kaeru-dx/helpdesk-cost-reduction-2025', 'result' => 'kaeru-dxhelpdesk-cost-reduction-2025'],
            ['id' => 22105, 'slug' => 'kaeru-dx.jp/helpdesk-inquiry-reduction-ai-knowledge', 'result' => 'kaeru-dxjphelpdesk-inquiry-reduction-ai-knowledge'],
            ['id' => 22106, 'slug' => 'https://kaeru-dx.co.jp/helpdesk-faq-reduction-ai-knowledge', 'result' => 'httpskaeru-dxcojphelpdesk-faq-reduction-ai-knowledge'],
            ['id' => 22107, 'slug' => '/kaeru-dx/helpdesk-normalization-ai-knowledge', 'result' => 'kaeru-dxhelpdesk-normalization-ai-knowledge'],
            ['id' => 22108, 'slug' => 'https://kaeru-dx.co.jp/helpdesk-knowledge-sharing-2025', 'result' => 'httpskaeru-dxcojphelpdesk-knowledge-sharing-2025'],
            ['id' => 22109, 'slug' => 'ai-chatbot-emotion-understanding-2025/', 'result' => 'ai-chatbot-emotion-understanding-2025'],
            ['id' => 22110, 'slug' => '/ai-chatbot-koibito-2025/', 'result' => 'ai-chatbot-koibito-2025'],
            ['id' => 22111, 'slug' => '/customer-satisfaction-improvement-methods-2025/', 'result' => 'customer-satisfaction-improvement-methods-2025'],
            ['id' => 22112, 'slug' => '/customer-satisfaction-improvement-strategy-2025/', 'result' => 'customer-satisfaction-improvement-strategy-2025'],
            ['id' => 22113, 'slug' => '/customer-satisfaction-low-cause-solution-2025/', 'result' => 'customer-satisfaction-low-cause-solution-2025'],
            ['id' => 22114, 'slug' => '/internal-helpdesk-24h-ai-strategy', 'result' => 'internal-helpdesk-24h-ai-strategy'],
            ['id' => 22115, 'slug' => '/remote-work-helpdesk-optimization-2025', 'result' => 'remote-work-helpdesk-optimization-2025'],
            ['id' => 22116, 'slug' => 'https://kaeru-dx.co.jp/it-inquiry-efficiency-ai-manual', 'result' => 'httpskaeru-dxcojpit-inquiry-efficiency-ai-manual'],
            ['id' => 22117, 'slug' => '/soumu-inquiry-dx', 'result' => 'soumu-inquiry-dx'],
            ['id' => 22118, 'slug' => '/internal-helpdesk-speed-up-ai-process-improvement/', 'result' => 'internal-helpdesk-speed-up-ai-process-improvement'],
            ['id' => 22119, 'slug' => 'dx/sales-dx-ai-strategy-success-guideai', 'result' => 'dxsales-dx-ai-strategy-success-guideai'],
            ['id' => 22120, 'slug' => '/sales-process-ai-optimization-guide/', 'result' => 'sales-process-ai-optimization-guide'],
            ['id' => 22121, 'slug' => '/sales-cost-reduction-ai-40percent-profit-improvement-10percent', 'result' => 'sales-cost-reduction-ai-40percent-profit-improvement-10percent'],
            ['id' => 22122, 'slug' => '/eigyo-ai-jikan-katsuyou-2bai-kouka', 'result' => 'eigyo-ai-jikan-katsuyou-2bai-kouka'],
            ['id' => 22123, 'slug' => '/knowledge-management-ai-guide-2025', 'result' => 'knowledge-management-ai-guide-2025'],
            ['id' => 22125, 'slug' => '/task-management-efficiency-guide-2025/', 'result' => 'task-management-efficiency-guide-2025'],
            ['id' => 22126, 'slug' => '/schedule-management-ai-automation-efficiency-2025/', 'result' => 'schedule-management-ai-automation-efficiency-2025'],
        ];

        $fixedCount = 0;
        foreach ($list as $key => $item) {
            $slug = $this->replaceSlugSpecialCharacters($item['slug']);
            if (empty(trim($slug))) {
                $this->command->error('Step 1: Invalid slug: ID: ' . $item['id'] . ' - ' . $item['slug']);

                continue;
            }

            $slug = Str::slug($this->convertJapaneseToRomaji(trim($slug)));
            $slug = $this->sanitizeSlug($slug);

            if (empty(trim($slug))) {
                $this->command->error('Step 2: Invalid slug: ID: ' . $item['id'] . ' - ' . $item['slug']);

                continue;
            }

            $slugPrefix = 0;
            do {
                if ($slugPrefix > 0) {
                    $slug .= '-' . $slugPrefix;
                }
                $checkSlug = Article::where('id', '!=', $item['id'])
                    ->where('slug', $slug)
                    ->exists();
                $slugPrefix++;
            } while ($checkSlug);

            Article::where('id', $item['id'])->update(['slug' => $slug]);

            $fixedCount++;
            $this->command->info('Fixed ID ' . $item['id'] . ': ' . $slug);
        }

        $this->command->info('Fixed ' . $fixedCount . ' slugs.');
        $this->command->info('Slug cleanup completed!');
    }

    private function replaceSlugSpecialCharacters($slug)
    {
        if (empty($slug)) {
            return $slug;
        }

        $slug = str_replace('！', '-', $slug);
        $slug = str_replace('【', '-', $slug);
        $slug = str_replace('】', '-', $slug);
        $slug = str_replace('？', '-', $slug);
        $slug = str_replace('（', '-', $slug);
        $slug = str_replace('）', '-', $slug);
        $slug = str_replace('https://', '-', $slug);
        $slug = str_replace('http://', '-', $slug);
        $slug = str_replace('/', '-', $slug);
        $slug = str_replace('.', '-', $slug);

        return $slug;
    }

    /**
     * Sanitize slug to only allow a-z, 0-9, and hyphens
     *
     * @param string $slug
     * @return string
     */
    private function sanitizeSlug($slug)
    {
        if (empty($slug)) {
            return $slug;
        }

        return preg_replace('/^-+|-+$/', '', // Remove leading/trailing hyphens
            preg_replace('/-+/', '-', // Replace multiple consecutive hyphens with single hyphen
                preg_replace('/[^a-z0-9\s-]/', '', // Remove special characters except spaces and hyphens
                    strtolower(trim($slug))
                )
            )
        );
    }

    /**
     * Convert Japanese text to Romaji.
     *
     * @param string $string
     * @return string
     */
    private function convertJapaneseToRomaji($string, $default = 'category')
    {
        $romaji = null;
        $default = $default . '-' . uniqid();

        try {
            $kakasiOutput = shell_exec('echo ' . escapeshellarg($string) . ' | kakasi -i utf8 -Ha -Ka -Ja -Ea -ka 2>/dev/null');
            $romaji = trim($kakasiOutput);
        } catch (\Exception $e) {
            logger()->error('Failed to convert Japanese to Romaji: ' . $e->getMessage());
        }

        if (empty($romaji) || $romaji === ' ') {
            $romaji = transliterator_transliterate(
                'Any-Latin; NFKD; [:Nonspacing Mark:] Remove; Lower; NFC',
                $string
            );
        }

        if (empty($romaji)) {
            $romaji = $default;
        }

        if ($romaji === $default) {
            logger()->warning('Failed to convert Japanese to Romaji for string: ' . $string);
        }

        return $romaji;
    }
}
