/home/brandsfa/www/app/Http/Controllers/Admin/ThirdParty/MailController.php
<?php

namespace App\Http\Controllers\Admin\ThirdParty;

use App\Contracts\Repositories\BusinessSettingRepositoryInterface;
use App\Enums\ViewPaths\Admin\Mail;
use App\Http\Controllers\BaseController;
use App\Http\Requests\Admin\MailUpdateRequest;
use App\Services\MailService;
use Brian2694\Toastr\Facades\Toastr;
use Illuminate\Contracts\View\View;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;

class MailController extends BaseController
{

    public function __construct(
        private readonly BusinessSettingRepositoryInterface $businessSettingRepo,
        private readonly MailService $mailService,
    )
    {
    }

    /**
     * @param Request|null $request
     * @param string|null $type
     * @return View Index function is the starting point of a controller
     * Index function is the starting point of a controller
     */
    public function index(Request|null $request, string $type = null): View
    {
        return $this->getView();
    }

    public function getView(): View
    {
        return view(Mail::VIEW[VIEW]);
    }

    public function update(MailUpdateRequest $request): RedirectResponse
    {
        if ($request['status'] == 1) {
            $mailConfigSendGrid = $this->businessSettingRepo->getFirstWhere(params: ['type' => 'mail_config_sendgrid']);
            $mailData = json_decode($mailConfigSendGrid['value'], true);
            $mailDataArray = $this->mailService->getMailData(mailData: $mailData);
            $this->businessSettingRepo->updateWhere(params: ['type' => 'mail_config_sendgrid'], data: ['value' => json_encode($mailDataArray)]);
        }

        $dataArray = $this->mailService->getData(request: $request);
        $this->businessSettingRepo->updateWhere(params: ['type' => 'mail_config'], data: ['value' => json_encode($dataArray)]);
        Toastr::success(translate('Configuration_updated_successfully'));
        return back();
    }

    public function updateSendGrid(MailUpdateRequest $request): RedirectResponse
    {
        if ($request['status'] == 1) {
            $mailConfig = $this->businessSettingRepo->getFirstWhere(params: ['type' => 'mail_config']);
            $dataMailSmtp = json_decode($mailConfig['value'], true);
            $mailDataArray = $this->mailService->getMailData(mailData: $dataMailSmtp);
            $this->businessSettingRepo->updateWhere(params: ['type' => 'mail_config'], data: ['value' => json_encode($mailDataArray)]);
        }
        $dataArray = $this->mailService->getData(request: $request);
        $this->businessSettingRepo->updateWhere(params: ['type' => 'mail_config_sendgrid'], data: ['value' => json_encode($dataArray)]);
        Toastr::success(translate('SendGrid_Configuration_updated_successfully'));
        return back();
    }

    public function send(Request $request): JsonResponse
    {
        $responseFlag = $this->mailService->sendMail(request: $request);
        return response()->json(['success' => $responseFlag]);
    }
}