<?php

namespace App\Http\Middleware;

use App\Models\MailConfig;
use App\Providers\MailServiceProvider;
use App\User;
use Closure;

class MailService
{
    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $userId = null;
        $user = null;

        if (auth('backend')->check()) {
            $user = auth('backend')->user();
        } else {
            try {
                $token = \request()->header('authorization');
                $user = \JWTAuth::parseToken()->toUser();
            } catch (\Exception $exception) {

            }
        }
        if (!empty($user)) {
            $userId = $user->id;
            if ($user->type == User::STAFF) {
                $userId = $user->staff_owner_id;
            }
        }

        if (empty($userId)) {
            return $next($request);
        }


        $mailConfig = MailConfig::query()
            ->where('owner_id', $userId)
            ->first();

        if (!$mailConfig) {
            return $next($request);
        }

        config()->set('mail', [
            'driver' => 'smtp',
            'host' => $mailConfig->smtp_server,
            'port' => $mailConfig->smtp_port,
            'from' => ['address' => $mailConfig->email, 'name' => $mailConfig->email],
            'encryption' => $mailConfig->encryption,
            'username' => $mailConfig->smtp_username,
            'password' => $mailConfig->smtp_password
        ]);

        return $next($request);
    }
}
