<?php

namespace App\Services;

use App\Models\Ad;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

/**
 * Verifikasi situs tujuan untuk iklan link_website (RPD §3.1).
 *
 * Generate kode unik → user pasang di situs → sistem cek keberadaan kode di HTML.
 */
class VerificationService
{
    /**
     * Generate & simpan kode verifikasi unik pada campaign.
     */
    public function generateCode(Ad $ad): string
    {
        $code = 'okeweb-'.Str::lower(Str::random(24));

        $ad->update(['verification_code' => $code]);

        return $code;
    }

    /**
     * Cek apakah kode verifikasi ada di HTML situs tujuan.
     * Set verified_at bila ditemukan.
     *
     * @return bool true bila terverifikasi (atau sudah terverifikasi sebelumnya).
     */
    public function verify(Ad $ad): bool
    {
        if ($ad->isVerified()) {
            return true;
        }

        if (! $ad->verification_code) {
            return false;
        }

        try {
            $response = Http::timeout(10)
                ->withOptions(['verify' => false])
                ->get($ad->url);

            if (! $response->successful()) {
                return false;
            }

            if (str_contains($response->body(), $ad->verification_code)) {
                $ad->update(['verified_at' => now()]);

                return true;
            }
        } catch (\Throwable $e) {
            return false;
        }

        return false;
    }
}
