<?php

namespace App\Traits;

use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;

/**
 * CMS テンプレートを使ったメール送信の共通処理
 * Controller や Command で use して利用する
 */
trait SendsTemplateEmail
{
    protected function sendTemplateEmail(string $settingSlug, string $toEmail, array $variables)
    {
        $templateId = config("settings.{$settingSlug}");
        if (!$templateId) {
            Log::warning("[Email] Template not configured for: {$settingSlug}");
            return;
        }

        $template = \App\Template::where('is_deleted', false)
            ->where('is_activated', true)
            ->where('id', $templateId)
            ->first();

        if (!$template || !$template->title || !$template->content) {
            Log::warning("[Email] Template not found or empty for: {$settingSlug}");
            return;
        }

        $variables['site_name'] = $variables['site_name'] ?? config('settings.site_name', 'KIREI');
        $variables['site_url'] = $variables['site_url'] ?? config('app.url');

        $title = $template->title;
        $content = $template->content;

        foreach ($variables as $key => $value) {
            if ($value === null) {
                $value = '';
            }
            if (!is_scalar($value)) {
                continue;
            }
            $title = str_replace("{{ {$key} }}", $value, $title);
            $content = str_replace("{{ {$key} }}", $value, $content);
        }

        Mail::to($toEmail)->send(new \App\Mail\SystemEmail($title, $content));
    }
}
