/home/brandsfa/www/app/Http/Controllers/RestAPI/v4/GeneralController.php
<?php

namespace App\Http\Controllers\RestAPI\v4;

use App\Http\Controllers\Controller;
use App\Models\Contact;
use App\Models\GuestUser;
use App\Models\HelpTopic;
use App\Models\SocialMedia;
use App\Models\Subscription;
use App\Utils\Helpers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class GeneralController extends Controller
{
    public function faq()
    {
        return response()->json(HelpTopic::status()->orderBy('ranking')->get(), 200);
    }

    public function get_guest_id(Request $request)
    {
        $guest_id = GuestUser::insertGetId([
            'ip_address' => $request->ip(),
            'created_at' => now(),
        ]);
        return response()->json(['guest_id' => $guest_id], 200);
    }

    public function subscription(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'subscription_email' => 'required'
        ], [
            'subscription_email.required' => 'The email is required!'

        ]);

        if ($validator->fails()) {
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
        }

        $subscription_email = Subscription::where('email', $request->subscription_email)->first();
        if ($subscription_email) {
            return response()->json(['status' => 'subscribed', 200]);

        } else {
            $new_subcription = new Subscription;
            $new_subcription->email = $request->subscription_email;
            $new_subcription->save();

            return response()->json(['status' => 'success', 200]);
        }

    }

    public function social_media()
    {
        $socials = SocialMedia::where(['active_status' => 1])->get();

        return response()->json(['socials' => $socials, 200]);
    }

    public function contact_store(Request $request)
    {
        $validatorRules = [
            'mobile_number' => 'required',
            'subject' => 'required',
            'message' => 'required',
            'email' => 'required',
            'name' => 'required',
        ];

        $recaptcha = getWebConfig(name: 'recaptcha');
        if (isset($recaptcha) && $recaptcha['status'] == 1) {
            $validatorRules['g-recaptcha-response'] = [
                function ($attribute, $value, $fail) {
                    if (!$this->isGoogleRecaptchaValid($value)) {
                        $fail('ReCAPTCHA Failed');
                    }
                },
            ];
        }
        $validator = Validator::make($request->all(), $validatorRules, [
            'name.required' => 'Name is Empty!',
            'mobile_number.required' => 'Mobile Number is Empty!',
            'subject.required' => ' Subject is Empty!',
            'message.required' => 'Message is Empty!',
            'email.required' => 'Email is Empty!',
        ]);

        if ($validator->fails()) {
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
        }

        $contact = new Contact;
        $contact->name = $request->name;
        $contact->email = $request->email;
        $contact->mobile_number = $request->mobile_number;
        $contact->subject = $request->subject;
        $contact->message = $request->message;
        $contact->save();

        return response()->json(['message' => 'Your Message Send Successfully'], 200);
    }
}