<?php

namespace App\Http\Controllers\Frontend;

use App\Exceptions\ApiHttpException;
use App\Http\Controllers\Controller;
use App\Http\Requests\NewsletterSubscriptionRequest;
use Illuminate\Support\Facades\Http;

class NewsletterSubscriptionsController extends Controller
{
    public function subscribe(NewsletterSubscriptionRequest $request)
    {
        $data = $request->validated();

        $brevoApiKey = config('services.brevo.key');
        $newsletterListId = (int) config('services.brevo.newsletter_list_id', 11);

        if (empty($brevoApiKey)) {
            throw new ApiHttpException(500, [
                'error' => 'brevo_not_configured',
                'message' => 'Brevo API key is not configured.',
            ]);
        }

        $response = Http::timeout(10)
            ->withHeaders([
                'accept' => 'application/json',
                'api-key' => $brevoApiKey,
            ])
            ->post('https://api.brevo.com/v3/contacts', [
                'email' => $data['email'],
                'attributes' => [
                    'FIRSTNAME' => $data['firstName'],
                    'LASTNAME' => $data['lastName'],
                ],
                'listIds' => [$newsletterListId],
                'updateEnabled' => true,
            ]);

        if (!$response->successful()) {
            throw new ApiHttpException(502, [
                'error' => 'brevo_subscription_failed',
                'message' => 'Unable to subscribe the contact at this time.',
            ]);
        }

        return response()->json(['success' => true]);
    }
}
