<?php

namespace App\Utility;

use App\Models\Setting;
use App\Models\SmsTemplate;
use App\Services\SendSmsService;

class SmsUtility
{
    public static function order_placement($customer = '', $order = '', $pdfUrl = ''): void
    {
        self::sendOrderPlacementSms('order_placement', $customer, $order, $pdfUrl);
    }

    public static function pos_order_placement($customer = '', $order = '', $pdfUrl = '', ?string $recipientMobile = null): void
    {
        self::sendOrderPlacementSms('pos_order_placement', $customer, $order, $pdfUrl, $recipientMobile);
    }

    public static function order_tracking_details($customer = '', $order = ''): void
    {
        $template = SmsTemplate::where('identifier', 'order_tracking_details')
            ->where('is_active', true)
            ->first();

        if (!$template || empty($customer->mobile)) {
            return;
        }

        $siteName = ucwords(Setting::get('site_name', env('APP_NAME', 'KiyoKart')));
        $replacements = [
            '[[customer_name]]' => ucwords((string) ($customer->name ?? '')),
            '[[order_id]]' => '#' . $order->id,
            '[[orders_url]]' => env('ORDERS_URL', 'https://kiyosnap.com/i0nan'),
            '[[site_name]]' => $siteName,
        ];
        $message = self::replacePlaceholders((string) $template->body, $replacements);

        $smsService = new SendSmsService();
        $smsService->send(
            (string) $customer->mobile,
            $message,
            $template->template_id,
            $smsService->buildVariablesValues((string) $template->body, $replacements),
            'order_tracking_details'
        );
    }

    private static function sendOrderPlacementSms(
        string $identifier,
        $customer,
        $order,
        string $pdfUrl,
        ?string $recipientMobile = null
    ): void {
        $template = SmsTemplate::where('identifier', $identifier)
            ->where('is_active', true)
            ->first();

        $toMobile = $recipientMobile ?: ($customer->mobile ?? '');
        if (!$template || $toMobile === '') {
            return;
        }

        $siteName = ucwords(Setting::get('site_name', env('APP_NAME', 'KiyoKart')));
        $replacements = [
            '[[customer_name]]' => ucwords((string) ($customer->name ?? '')),
            '[[order_id]]' => '#' . $order->id,
            '[[invoice_link]]' => $pdfUrl,
            '[[site_name]]' => $siteName,
        ];
        $message = self::replacePlaceholders((string) $template->body, $replacements);

        $smsService = new SendSmsService();
        $smsService->send(
            $toMobile,
            $message,
            $template->template_id,
            $smsService->buildVariablesValues((string) $template->body, $replacements),
            $identifier
        );
    }

    private static function replacePlaceholders(string $message, array $replacements): string
    {
        return str_replace(array_keys($replacements), array_values($replacements), $message);
    }
}
