<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\SmtpConfiguration;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
use Symfony\Component\HttpFoundation\Response;

class EnvsettingController extends Controller
{
    public function index()
    {
        abort_if(Gate::denies('smtp_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden');

        $smtpConfig = SmtpConfiguration::first();
       
        return view('admin.EnvSetting.smtp_form',compact('smtpConfig'));
    }
    
    public function storeSmtp(Request $request)
    {
        $request->validate([
            'mailer' => 'required',
            'host' => 'required',
            'port' => 'required|min:1|max:65535',
            'username' => 'required',
            'password' => 'required',
            'encryption' => 'required',
            'address' => 'required',
            'name' => 'required',
        ]);

        $smtpConfig = SmtpConfiguration::first();

        if (!$smtpConfig) {
            $smtpConfig = new SmtpConfiguration();
        }

        $smtpConfig->mailer = $request->mailer ?? '';
        $smtpConfig->host = $request->host ?? '';
        $smtpConfig->port = $request->port ?? '';
        $smtpConfig->username = $request->username ?? '';
        $smtpConfig->password = $request->password ?? '';
        $smtpConfig->encryption = $request->encryption ?? '';
        $smtpConfig->address = $request->address ?? '';
        $smtpConfig->name = $request->name ?? '';
        $smtpConfig->save();

        $envConfig = [
            'MAIL_MAILER' => $request->mailer ?? '',
            'MAIL_HOST' => $request->host ?? '',
            'MAIL_PORT' => $request->port ?? '',
            'MAIL_USERNAME' => $request->username ?? '',
            'MAIL_PASSWORD' => $request->password ?? '',
            'MAIL_ENCRYPTION' => $request->encryption ?? '',
            'MAIL_FROM_ADDRESS' => $request->address ?? '',
            'MAIL_FROM_NAME' => $request->name ?? ''
        ];

        $this->updateEnvFile($envConfig);

        return redirect()->route('admin.EnvSetting.SMTP')->with('success', __('global.smtp_configuration_updated'));
    }

    public function updateEnvFile($config)
    {
        $envFile = base_path('.env');

        if (!file_exists($envFile)) {
            file_put_contents($envFile, '');
        }

        $envContent = file_get_contents($envFile);
        foreach ($config as $key => $value) {
            if (in_array($key, ['MAIL_MAILER', 'MAIL_HOST','MAIL_PORT','MAIL_USERNAME','MAIL_PASSWORD','MAIL_ENCRYPTION', 'MAIL_FROM_ADDRESS'])) {
                $value = $value;
            } else {
                $value = '"' . addslashes($value) . '"';
            }

            $pattern = "/^{$key}=(.*)/m";
            if (preg_match($pattern, $envContent)) {
                $envContent = preg_replace($pattern, "{$key}={$value}", $envContent);
            } else {
               $envContent .= "\n{$key}={$value}";
            }
        }
        
        file_put_contents($envFile, $envContent);
    }
}