<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;

class CreatePhase3EmailTemplatesAndSettings extends Migration
{
    public function up()
    {
        $templates = [
            [
                'slug' => 'email_storage_charge_complete',
                'name' => '保管料決済完了メール',
                'title' => '【KIREI】保管料決済完了のお知らせ',
                'content' => "{{ user_name }} 様\n\n保管料の決済が完了いたしました。\n\n■ 商品名: {{ product_name }}\n■ 決済金額: ¥{{ amount }}（税込）\n■ 次回更新日: {{ next_renewal_date }}\n\n大切なお着物を引き続きお預かりいたします。\n\n{{ site_name }}",
                'setting_group' => 'u_email',
                'setting_name' => '保管料決済完了メール',
                'setting_type' => 'select|template:user:storage_charge_complete',
            ],
            [
                'slug' => 'email_storage_renewal_notice',
                'name' => '保管料更新案内メール',
                'title' => '【KIREI】保管料更新のご案内',
                'content' => "{{ user_name }} 様\n\n保管料の更新時期が近づいてまいりました。\n\n■ 商品名: {{ product_name }}\n■ 更新金額: ¥{{ amount }}（税込）\n■ 更新日: {{ next_renewal_date }}\n\n更新をご希望されない場合は、{{ cancel_deadline }}までにお問い合わせください。\n\n{{ site_name }}",
                'setting_group' => 'u_email',
                'setting_name' => '保管料更新ご案内メール',
                'setting_type' => 'select|template:user:storage_renewal_notice',
            ],
            [
                'slug' => 'email_storage_renewal_complete',
                'name' => '保管料更新完了メール',
                'title' => '【KIREI】保管料更新完了のお知らせ',
                'content' => "{{ user_name }} 様\n\n保管料の自動更新が完了いたしました。\n\n■ 商品名: {{ product_name }}\n■ 決済金額: ¥{{ amount }}（税込）\n■ 次回更新日: {{ next_renewal_date }}\n\n引き続きよろしくお願いいたします。\n\n{{ site_name }}",
                'setting_group' => 'u_email',
                'setting_name' => '保管料更新完了メール',
                'setting_type' => 'select|template:user:storage_renewal_complete',
            ],
            [
                'slug' => 'email_owner_rental_notify',
                'name' => '商品貸出通知メール（オーナー向け）',
                'title' => '【KIREI】お着物がレンタルされました',
                'content' => "{{ owner_name }} 様\n\nお預かりしているお着物がレンタルされました。\n\n■ 商品名: {{ product_name }}\n■ レンタル期間: {{ rental_period }}\n■ 報酬額: ¥{{ reward_amount }}\n\nレンタル終了後にペイバックについてご案内いたします。\n\n{{ site_name }}",
                'setting_group' => 'u_email',
                'setting_name' => '商品貸出通知メール（オーナー向け）',
                'setting_type' => 'select|template:user:owner_rental_notify',
            ],
            [
                'slug' => 'email_owner_payback_confirmed',
                'name' => 'ペイバック確定メール',
                'title' => '【KIREI】ペイバック確定のお知らせ',
                'content' => "{{ owner_name }} 様\n\nレンタルが終了し、ペイバックが確定いたしました。\n\n■ 商品名: {{ product_name }}\n■ レンタル料金: ¥{{ rental_amount }}\n■ 報酬額（ペイバック）: ¥{{ reward_amount }}\n■ 振込予定: {{ transfer_schedule }}\n\n{{ site_name }}",
                'setting_group' => 'u_email',
                'setting_name' => 'ペイバック確定メール（オーナー向け）',
                'setting_type' => 'select|template:user:owner_payback_confirmed',
            ],
            [
                'slug' => 'email_owner_transfer_complete',
                'name' => '報酬振込完了メール',
                'title' => '【KIREI】報酬振込完了のお知らせ',
                'content' => "{{ owner_name }} 様\n\n報酬のお振込みが完了いたしました。\n\n■ 商品名: {{ product_name }}\n■ 振込金額: ¥{{ reward_amount }}\n■ 振込日: {{ transferred_at }}\n\nご確認をお願いいたします。\n\n{{ site_name }}",
                'setting_group' => 'u_email',
                'setting_name' => '振込完了メール（オーナー向け）',
                'setting_type' => 'select|template:user:owner_transfer_complete',
            ],
            [
                'slug' => 'email_listing_approved',
                'name' => '出品申請承認メール',
                'title' => '【KIREI】出品申請承認のお知らせ',
                'content' => "{{ user_name }} 様\n\n出品申請が承認されました。\n\n■ 商品名: {{ product_name }}\n\nお着物がレンタルされますと、ペイバック（報酬）が発生いたします。\n詳細はマイページの「報酬履歴」よりご確認いただけます。\n\n{{ site_name }}",
                'setting_group' => 'u_email',
                'setting_name' => '出品申請承認メール',
                'setting_type' => 'select|template:user:listing_approved',
            ],
            [
                'slug' => 'email_listing_stopped',
                'name' => '出品停止承認メール',
                'title' => '【KIREI】出品停止承認のお知らせ',
                'content' => "{{ user_name }} 様\n\n出品停止申請が承認されました。\n\n■ 商品名: {{ product_name }}\n\n今後は保管サービスとして年間保管料（¥6,600/税込）が発生いたします。\nカード登録がお済みでない方は、マイページよりご登録をお願いいたします。\n\n{{ site_name }}",
                'setting_group' => 'u_email',
                'setting_name' => '出品停止承認メール',
                'setting_type' => 'select|template:user:listing_stopped',
            ],
            [
                'slug' => 'email_return_shipped',
                'name' => '返却商品発送通知メール',
                'title' => '【KIREI】返却商品発送のお知らせ',
                'content' => "{{ user_name }} 様\n\nご返却のお着物を発送いたしました。\n\n■ 商品名: {{ product_name }}\n\nお届けまで今しばらくお待ちください。\nこれまでのご利用ありがとうございました。\n\n{{ site_name }}",
                'setting_group' => 'u_email',
                'setting_name' => '返却発送通知メール',
                'setting_type' => 'select|template:user:return_shipped',
            ],
            [
                'slug' => 'email_temp_return_shipped',
                'name' => '一時返却商品発送通知メール',
                'title' => '【KIREI】一時返却商品発送のお知らせ',
                'content' => "{{ user_name }} 様\n\n一時返却のお着物を発送いたしました。\n\n■ 商品名: {{ product_name }}\n■ 返却予定日: {{ return_date }}\n\n{{ return_date }}までに店舗へのお持ち込み、または当社までご返送をお願いいたします。\n\n{{ site_name }}",
                'setting_group' => 'u_email',
                'setting_name' => '一時返却発送通知メール',
                'setting_type' => 'select|template:user:temp_return_shipped',
            ],
        ];

        // 管理者向けテンプレート
        $managerTemplates = [
            [
                'slug' => 'm_service_request_received',
                'name' => '各種申請通知メール（管理者向け）',
                'title' => '【KIREI】各種申請を受け付けました',
                'content' => "お客様より各種申請を受け付けました。\n\n■ 申請種別: {{ request_type }}\n■ 申請者: {{ user_name }}\n■ 対象商品: {{ product_name }}\n\n■ 申請内容:\n{{ content }}\n\n管理画面より確認・対応をお願いいたします。\n\n{{ site_name }}",
                'setting_group' => 'm_email',
                'setting_name' => '【管理】各種申請通知',
                'setting_type' => 'select|template:manager:service_request_received',
            ],
            [
                'slug' => 'm_identity_submitted',
                'name' => '本人確認提出通知メール（管理者向け）',
                'title' => '【KIREI】本人確認書類が提出されました',
                'content' => "本人確認書類の{{ status_label }}がありました。\n\n■ 申請者: {{ user_name }}\n\n管理画面より確認・対応をお願いいたします。\n\n{{ site_name }}",
                'setting_group' => 'm_email',
                'setting_name' => '【管理】本人確認提出通知',
                'setting_type' => 'select|template:manager:identity_submitted',
            ],
        ];

        $allTemplates = array_merge(
            array_map(function ($t) { $t['group'] = 0; return $t; }, $templates),
            array_map(function ($t) { $t['group'] = 1; return $t; }, $managerTemplates)
        );

        foreach ($allTemplates as $tpl) {
            // 既存チェック（重複防止）
            $existing = DB::table('templates')->where('name', $tpl['name'])->first();
            if ($existing) {
                $templateId = $existing->id;
            } else {
                $templateId = DB::table('templates')->insertGetId([
                    'name' => $tpl['name'],
                    'type' => 0,
                    'title' => $tpl['title'],
                    'content' => $tpl['content'],
                    'user_id' => 1,
                    'group' => $tpl['group'],
                    'is_activated' => 1,
                    'is_deleted' => 0,
                    'created_at' => now(),
                    'updated_at' => now(),
                ]);
            }

            // settings登録（既存チェック）
            $existingSetting = DB::table('settings')->where('slug', $tpl['slug'])->first();
            if (!$existingSetting) {
                DB::table('settings')->insert([
                    'group' => $tpl['setting_group'],
                    'tab' => 'email',
                    'slug' => $tpl['slug'],
                    'name' => $tpl['setting_name'],
                    'content' => (string) $templateId,
                    'example' => null,
                    'rule' => '',
                    'type' => $tpl['setting_type'],
                    'is_publish' => 1,
                    'is_activated' => 1,
                    'is_deleted' => 0,
                    'created_at' => now(),
                    'updated_at' => now(),
                ]);
            }
        }
    }

    public function down()
    {
        $slugs = [
            'email_storage_charge_complete',
            'email_storage_renewal_notice',
            'email_storage_renewal_complete',
            'email_owner_rental_notify',
            'email_owner_payback_confirmed',
            'email_owner_transfer_complete',
            'email_listing_approved',
            'email_listing_stopped',
            'email_return_shipped',
            'email_temp_return_shipped',
            'm_service_request_received',
            'm_identity_submitted',
        ];

        DB::table('settings')->whereIn('slug', $slugs)->delete();

        $names = [
            '保管料決済完了メール',
            '保管料更新案内メール',
            '保管料更新完了メール',
            '商品貸出通知メール（オーナー向け）',
            'ペイバック確定メール',
            '報酬振込完了メール',
            '出品申請承認メール',
            '出品停止承認メール',
            '返却商品発送通知メール',
            '一時返却商品発送通知メール',
            '各種申請通知メール（管理者向け）',
            '本人確認提出通知メール（管理者向け）',
        ];

        DB::table('templates')->whereIn('name', $names)->delete();
    }
}
