<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\BackendConfigurationStore; //! To be changed to work with Configuration file
use BackendUserService;
use Illuminate\Http\Request;
use RequestContext;
use App\Models\BackendAuth\BackendConfiguration;

class ConfigurationController extends Controller
{
    public function getEdit()
    {
        $loggedUser = BackendUserService::getLoggedUser();
        
        if (!$loggedUser->hasPermission("configuration.view") && !$loggedUser->hasPermission("configuration.edit")) {
            abort(403);
        }   
 
        $mailchimpKey = BackendConfiguration::where('name', 'mailchimp_key')->first();
        $mailchimpListID = BackendConfiguration::where('name', 'mailchimp_list_id')->first();
        $contactFormEmails = BackendConfiguration::where('name', 'contact_form_emails')->first();
        $googleAnalytics = BackendConfiguration::where('name', 'google_analytics')->first();
        if (!is_null($contactFormEmails)) {
            $contactFormEmails->value = implode(", ", json_decode($contactFormEmails->value));
        }
        RequestContext::set('selected_menu', 'admin');
        RequestContext::set('selected_menu_option', 'configurations');

        return view('admin.pages.configurations.configuration_form', [
            'mailchimp_key' => $mailchimpKey,
            'mailchimp_list_id' => $mailchimpListID,
            'google_analytics' => $googleAnalytics,
            'contact_form_emails' => $contactFormEmails,
            'canEdit'        => $loggedUser->hasPermission("configuration.edit"),
            'canView'        => $loggedUser->hasPermission("configuration.view")
        ]);
    }

    public function postEdit(BackendConfigurationStore $request)
    {
        $loggedUser = BackendUserService::getLoggedUser();
        
        if (!$loggedUser->hasPermission("configuration.edit")) {
            abort(403);
        }

        $data = $request->validated();
        foreach ($data as $name => $value) {
            if ((gettype($value) == 'array')) {
                $value = json_encode($value);
            }
            $configuration = BackendConfiguration::where('name', $name)->first();
            if (!is_null($configuration)) {
                $configuration->name = $name;
                $configuration->value = $value;
                $configuration->save();
                if ($configuration->name == 'mailchimp_key') {
                    config(['newsletter.apiKey' => $configuration->value]);
                }
                if ($configuration->name == 'mailchimp_list_id') {
                    config(['newsletter.lists.subscribers.id' => $configuration->value]);
                }
                if ($configuration->name == 'google_analytics') {
                    config(['app.google_analytics' => $configuration->value]);
                }
            } else {
                $configuration = BackendConfiguration::create([
                    'name' => $name,
                    'value' => $value
                ]);
            }
        }
        $message = trans('backend.configuration_saved_successfully',
            array('entity' => trans('backend.user')));

        return redirect('/admin/configurations')
            ->with("message", $message);
    }
}
