<?php

namespace App\Support;

use App\Models\Setting;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;

/**
 * سرویس ارسال پیامک از طریق درگاه «کاوه‌نگار».
 * کلید API و خط فرستنده از تنظیمات عمومی خوانده می‌شود.
 * این سرویس فقط برای اطلاع‌رسانی به مشتریان استفاده می‌شود.
 */
class Sms
{
    protected static function apiKey(): ?string
    {
        return Setting::current()->sms_api_key ?: null;
    }

    protected static function sender(): ?string
    {
        return Setting::current()->sms_sender ?: null;
    }

    /**
     * ارسال پیامک به یک شماره.
     */
    public static function send(string $to, string $text): bool
    {
        $apiKey = static::apiKey();

        if (! $apiKey) {
            Log::warning("SMS skipped (no API key) to {$to}: {$text}");

            return false;
        }

        try {
            $response = Http::asForm()
                ->timeout(15)
                ->get("https://api.kavenegar.com/v1/{$apiKey}/sms/send.json", array_filter([
                    'receptor' => $to,
                    'message' => $text,
                    'sender' => static::sender(),
                ]));

            $ok = $response->successful()
                && (int) data_get($response->json(), 'return.status') === 200;

            if (! $ok) {
                Log::error('Kavenegar SMS failed', ['to' => $to, 'response' => $response->body()]);
            }

            return $ok;
        } catch (\Throwable $e) {
            Log::error('Kavenegar SMS exception: ' . $e->getMessage());

            return false;
        }
    }

    /**
     * تست اتصال به کاوه‌نگار با کلید داده‌شده (یا کلید تنظیمات).
     *
     * @return array{ok: bool, message: string}
     */
    public static function testConnection(?string $apiKey = null): array
    {
        $apiKey = $apiKey ?: static::apiKey();

        if (! $apiKey) {
            return ['ok' => false, 'message' => 'کلید API وارد نشده است.'];
        }

        try {
            $response = Http::timeout(15)
                ->get("https://api.kavenegar.com/v1/{$apiKey}/account/info.json");

            $status = (int) data_get($response->json(), 'return.status');

            if ($response->successful() && $status === 200) {
                return ['ok' => true, 'message' => 'اتصال برقرار است'];
            }

            $msg = data_get($response->json(), 'return.message') ?: 'پاسخ نامعتبر از درگاه';

            return ['ok' => false, 'message' => 'اتصال قطع می‌باشد (' . $msg . ')'];
        } catch (\Throwable $e) {
            return ['ok' => false, 'message' => 'اتصال قطع می‌باشد'];
        }
    }
}
