<?php

namespace App\Http\Controllers;

use App\Models\Settings;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Validator, Input, Redirect;
use Yajny\Models\Region;

class SettingsController extends Controller
{
    protected $layout = "layouts.main";
    protected $data = array();

    public $module = 'settings';
    static $per_page = '10';

    public function __construct()
    {
        parent::__construct();
        $this->model = new Settings();
        $this->info = $this->model->makeInfo($this->module);
        $this->access = array();
    }

    public function index(Request $request, Settings $setting, $type)
    {
        if (!\Auth::check())
            return redirect('user/login')->with('status', 'error')->with('message', 'You are not login');

        $fields = $setting->wheresetting_group($type)->orderBy('seqID', 'asc')->get();
        $data = array(
            'pageTitle' => ucfirst($type) . ' Settings',
            'pageNote' => ucfirst($type) . ' Settings',
            'pageModule' => 'settings',
            'return' => self::returnUrl()
        );

        $regions = Region::all();
        return view('settings.index', $data, compact('fields', 'regions'));
    }

    public function updateSetting(Request $request, Settings $setting, $internalCall = false)
    {
        if ($request->setting_value):
            foreach ($request->setting_value as $key => $value) {
                if (is_array($request->setting_value[$key])) {
                    $settingField = $setting->wheresetting_key($key)->first();
                    if (in_array($key, explode(',', $request->lang_columns)) || $settingField->is_regional)
                        $implode = json_encode($request->setting_value[$key]);
                    else
                        $implode = implode(',', $request->setting_value[$key]);

                    $setting->wheresetting_key($key)->update(['setting_value' => $implode]);
                } else {
                    $setting->wheresetting_key($key)->update(['setting_value' => $request->setting_value[$key]]);
                }
            }
        endif;


        $getSetting = Settings::all()->mapWithKeys(function ($setting) {
            if ($setting->setting_dev_class == 'lang' || $setting->is_regional)
                return [$setting->setting_key => json_decode($setting->setting_value, true)];
            else
                return [$setting->setting_key => ($setting->setting_value)];
        });

        $val = '<?php
						return
						' . (var_export($getSetting->toArray(), true)) . '
						;
						';


        $filename = base_path() . '/config/settingConfig.php';
        $fp = fopen($filename, "w+");
        fwrite($fp, $val);
        fclose($fp);

        if (!$internalCall) {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, config('website.cnf_appurl') . '/makeSettings');
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('sweet' => md5('lord'), 'mama' => md5('mia'))));
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_exec($ch);
            curl_close($ch);

            $ch2 = curl_init();
            curl_setopt($ch2, CURLOPT_URL, config('website.cnf_apiurl') . '/auto/settings/pull');
            curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
            curl_exec($ch2);
            curl_close($ch2);

            return redirect()->back()->with('message', 'Setting Successfully updated')->with('status', 'success');
        } else {
            return true;
        }
    }

    function ajaxSelect(Request $request)
    {
        return $this->getAjaxselect($request);
    }

    public function makeEmailTemplateSettings()
    {
        $configTemplate = [];
        $allTemplates = DB::table('email_templates')->get()->toArray();
        foreach ($allTemplates as $template)
            $configTemplate[$template->template] = $template;

        $filename = base_path() . '/config/mailTemplate.json';
        $fp = fopen($filename, "w+");
        fwrite($fp, json_encode($configTemplate));
        fclose($fp);
        return 1;
    }
}
