<?php

namespace App\Http\Controllers;

use App\Models\FileUploader;
use App\Models\FrontendSetting;
use App\Models\Language;
use App\Models\Builder_page;
use App\Models\Badge;
use App\Models\HomePageSetting;
use App\Models\User;
use App\Models\UserReview;
use App\Models\Language_phrase;
use App\Models\PlayerSettings;
use App\Models\NotificationSetting;
use App\Models\Payment_gateway;
use App\Models\Setting;
use App\Models\ZapierSetting;
use Carbon\Carbon;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;

class SettingController extends Controller
{
    public function system_settings()
    {
        return view("admin.setting.system_setting");
    }

    public function system_settings_update(Request $request)
    {
        $data = $request->all();

        array_shift($data);

        foreach ($data as $key => $item) {
            Setting::where('type', $key)->update(['description' => $item]);
        }
        Session::flash('success', get_phrase('System settings update successfully'));
        return redirect()->back();
    }

    public function website_settings()
    {

        return view("admin.setting.website_setting");
    }
    public function website_settings_update(Request $request)
    {
        $data = $request->all();
        array_shift($data);
        if ($request->type == 'frontend_settings') {

            foreach ($data as $key => $item) {
                FrontendSetting::where('key', $key)->update(['value' => $item]);
            }
            Session::flash('success', get_phrase('Frontend settings update successfully'));
        }
        if ($request->type == 'motivational_speech') {
            array_shift($data);

            $motivations = array();
            $images = array();
            foreach (array_filter($data['titles']) as $key => $title) {
                $motivations[$key]['title'] = $title;
                $motivations[$key]['designation'] = $data['designation'][$key];
                $motivations[$key]['description'] = $data['descriptions'][$key];

                if ($_FILES['images']['name'][$key] != "") {
                    $motivations[$key]['image'] = FileUploader::upload($request->images[$key], "uploads/motivational_speech", 500);
                } else {
                    $motivations[$key]['image'] = $data['previous_images'][$key];
                }
                $images[$key] = $motivations[$key]['image'];
            }
            $files = glob('uploads/motivational_speech/' . '*');
            foreach ($files as $file) {
                $file_name_arr = explode('/', $file);
                $file_name = end($file_name_arr);
                if (!in_array($file_name, $images)) {
                    remove_file($file);
                }
            }
            $data['value'] = json_encode($motivations);
            FrontendSetting::where('key', 'motivational_speech')->update(['value' => $data['value']]);
            Session::flash('success', get_phrase('Motivational speech update successfully'));
        }
        if ($request->type == 'websitefaqs') {
            array_shift($data);

            $faqs = array();
            foreach (array_filter($data['questions']) as $key => $question) {
                $faqs[$key]['question'] = $question;
                $faqs[$key]['answer'] = $data['answers'][$key];
            }

            $data['value'] = json_encode($faqs);
            $faq = $data['value'];
            FrontendSetting::where('key', 'website_faqs')->update(['value' => $faq]);
            Session::flash('success', get_phrase('Website Faqs update successfully'));
        }
        if ($request->type == 'contact_info') {

            array_shift($data);
            $contact_information = json_encode($data);
            $row = FrontendSetting::where('key', 'contact_info')->get();
            if ($row->count() > 0) {
                FrontendSetting::where('key', 'contact_info')->update(['value' => $contact_information]);
            } else {
                FrontendSetting::where('key', 'contact_info')->update(['value' => $contact_information]);
            }
            Session::flash('success', get_phrase('Contact information update successfully'));
        }

        if ($request->type == 'recaptcha_settings') {
            array_shift($data);

            FrontendSetting::where('key', 'recaptcha_status')->update(['value' => $data['recaptcha_status']]);
            FrontendSetting::where('key', 'recaptcha_sitekey')->update(['value' => $data['recaptcha_sitekey']]);
            FrontendSetting::where('key', 'recaptcha_secretkey')->update(['value' => $data['recaptcha_secretkey']]);

            Session::flash('success', get_phrase('Recaptcha setting update successfully'));
        }

        if ($request->type == 'banner_image') {
            array_shift($data);

            if (isset($request->banner_image) && $request->banner_image != '') {

                $banner = $request->banner_image->extension();

                $data = "uploads/banner_image/" . nice_file_name('banner_image', $banner);
                FileUploader::upload($request->banner_image, $data);

                if (get_frontend_settings('home_page')) {
                    $active_banner = array(
                        get_frontend_settings('home_page') => $data
                    );
                    FrontendSetting::where('key', $request->type)->update(['value' => json_encode($active_banner)]);
                } else {
                    FrontendSetting::where('key', $request->type)->update(['value' => $data]);
                }

                Session::flash('success', get_phrase('Banner image update successfully'));
            }
        }
        if ($request->type == 'light_logo') {
            array_shift($data);

            if (isset($request->light_logo) && $request->light_logo != '') {

                $data = "uploads/light_logo/" . nice_file_name('light_logo', $request->light_logo->extension());
                FileUploader::upload($request->light_logo, $data, 400, null, 200, 200);

                FrontendSetting::where('key', $request->type)->update(['value' => $data]);
                Session::flash('success', get_phrase('Light logo update successfully'));
            }
        }
        if ($request->type == 'dark_logo') {
            array_shift($data);

            if (isset($request->dark_logo) && $request->dark_logo != '') {

                $data = "uploads/dark_logo/" . nice_file_name('dark_logo', $request->dark_logo->extension());
                FileUploader::upload($request->dark_logo, $data, 400, null, 200, 200);

                FrontendSetting::where('key', $request->type)->update(['value' => $data]);
                Session::flash('success', get_phrase('Dark logo update successfully'));
            }
        }
        if ($request->type == 'small_logo') {
            array_shift($data);

            if (isset($request->small_logo) && $request->small_logo != '') {

                $data = "uploads/small_logo/" . nice_file_name('small_logo', $request->small_logo->extension());
                FileUploader::upload($request->small_logo, $data, 400, null, 200, 200);

                FrontendSetting::where('key', $request->type)->update(['value' => $data]);
                Session::flash('success', get_phrase('Small logo update successfully'));
            }
        }
        if ($request->type == 'favicon') {
            array_shift($data);

            if (isset($request->favicon) && $request->favicon != '') {

                $data = "uploads/favicon/" . nice_file_name('favicon', $request->favicon->extension());
                FileUploader::upload($request->favicon, $data, 400, null, 200, 200);

                FrontendSetting::where('key', $request->type)->update(['value' => $data]);
                Session::flash('success', get_phrase('Favicon logo update successfully'));
            }
        }
        return redirect()->back();
    }

    public function drip_content_settings()
    {

        return view("admin.setting.drip_content_setting");
    }

    public function drip_content_settings_update(Request $request)
    {

        $alldata = $request->all();
        array_shift($alldata);
        $data['value'] = json_encode($alldata);
        Setting::where('type', 'drip_content_settings')->update(['description' => $data['value']]);
        Session::flash('success', get_phrase('Drip content settings update successfully'));
        return redirect()->back();
    }

    public function payment_settings()
    {

        return view("admin.setting.payment_setting");
    }
    public function payment_settings_update(Request $request)
    {
        $data = $request->all();
        array_shift($data);

        if ($request->top_part == 'top_part') {
            foreach ($data as $key => $item) {
                Setting::where('type', $key)->update(['description' => $item]);
            }
        } else {
            if ($request->identifier == 'paypal') {
                $paypal = [
                    'sandbox_client_id' => $data['sandbox_client_id'],
                    'sandbox_secret_key' => $data['sandbox_secret_key'],
                    'production_client_id' => $data['production_client_id'],
                    'production_secret_key' => $data['production_secret_key'],
                ];
                $paypal = json_encode($paypal);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $paypal;
            } elseif ($request->identifier == 'stripe') {
                $stripe = [
                    'public_key' => $data['public_key'],
                    'secret_key' => $data['secret_key'],
                    'public_live_key' => $data['public_live_key'],
                    'secret_live_key' => $data['secret_live_key'],
                ];
                $stripe = json_encode($stripe);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $stripe;
            } elseif ($request->identifier == 'razorpay') {
                $razorpay = [
                    'public_key' => $data['public_key'],
                    'secret_key' => $data['secret_key'],

                ];
                $razorpay = json_encode($razorpay);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $razorpay;
            } elseif ($request->identifier == 'flutterwave') {
                $flutterwave = [
                    'public_key' => $data['public_key'],
                    'secret_key' => $data['secret_key'],

                ];
                $flutterwave = json_encode($flutterwave);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $flutterwave;
            } elseif ($request->identifier == 'paytm') {
                $paytm = [
                    'paytm_merchant_key' => $data['paytm_merchant_key'] ?? '',
                    'paytm_merchant_mid' => $data['paytm_merchant_mid'] ?? '',
                    'paytm_merchant_website' => $data['paytm_merchant_website'] ?? '',
                    'industry_type_id' => $data['industry_type_id'] ?? '',
                    'channel_id' => $data['channel_id'] ?? '',
                ];
                $paytm = json_encode($paytm);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $paytm;
            } elseif ($request->identifier == 'offline') {
                $offline = [
                    'bank_information' => $data['bank_information'],

                ];
                $offline = json_encode($offline);
                $data = array_splice($data, 0, 4);

                $data['keys'] = $offline;
                unset($data['bank_information']);
            } elseif ($request->identifier == 'paystack') {
                $paystack = [
                    'secret_test_key' => $data['secret_test_key'],
                    'public_test_key' => $data['public_test_key'],
                    'secret_live_key' => $data['secret_live_key'],
                    'public_live_key' => $data['public_live_key'],
                ];
                $paystack = json_encode($paystack);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $paystack;
            } elseif ($request->identifier == 'ccavenue') {
                $ccavenue = [
                    'ccavenue_merchant_id' => $data['ccavenue_merchant_id'],
                    'ccavenue_working_key' => $data['ccavenue_working_key'],
                    'ccavenue_access_code' => $data['ccavenue_access_code'],
                ];
                $ccavenue = json_encode($ccavenue);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $ccavenue;
            } elseif ($request->identifier == 'pagseguro') {
                $pagseguro = [
                    'api_key' => $data['api_key'],
                    'secret_key' => $data['secret_key'],
                    'other_parameter' => $data['other_parameter'],
                ];
                $pagseguro = json_encode($pagseguro);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $pagseguro;
            } elseif ($request->identifier == 'iyzico') {
                $iyzico = [
                    'api_test_key' => $data['api_test_key'],
                    'secret_test_key' => $data['secret_test_key'],
                    'api_live_key' => $data['api_live_key'],
                    'secret_live_key' => $data['secret_live_key'],
                ];
                $iyzico = json_encode($iyzico);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $iyzico;
            } elseif ($request->identifier == 'xendit') {
                $xendit = [
                    'api_key' => $data['api_key'],
                    'secret_key' => $data['secret_key'],
                    'other_parameter' => $data['other_parameter'],
                ];
                $xendit = json_encode($xendit);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $xendit;
            } elseif ($request->identifier == 'payu') {
                $payu = [
                    'pos_id' => $data['pos_id'],
                    'second_key' => $data['second_key'],
                    'client_id' => $data['client_id'],
                    'client_secret' => $data['client_secret'],
                ];
                $payu = json_encode($payu);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $payu;
            } elseif ($request->identifier == 'skrill') {
                $skrill = [
                    'skrill_merchant_email' => $data['skrill_merchant_email'],
                    'secret_passphrase' => $data['secret_passphrase']
                ];
                $skrill = json_encode($skrill);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $skrill;
            } elseif ($request->identifier == 'doku') {
                $doku = [
                    'client_id' => $data['client_id'] ?? '',
                    'secret_test_key' => $data['secret_test_key'] ?? '',
                    'public_test_key' => $data['public_test_key'] ?? '',
                    'secret_live_key' => $data['secret_live_key'] ?? '',
                    'public_live_key' => $data['public_live_key'] ?? ''
                ];
                $doku = json_encode($doku);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $doku;
            } elseif ($request->identifier == 'maxicash') {
                $maxicash = [
                    'merchant_id' => $data['merchant_id'],
                    'merchant_password' => $data['merchant_password']
                ];
                $maxicash = json_encode($maxicash);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $maxicash;
            } elseif ($request->identifier == 'cashfree') {
                $cashfree = [
                    'client_id' => $data['client_id'],
                    'client_secret' => $data['client_secret']
                ];
                $cashfree = json_encode($cashfree);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $cashfree;
            } elseif ($request->identifier == 'aamarpay') {
                $aamarpay = [
                    'store_id' => $data['store_id'],
                    'signature_key' => $data['signature_key'],
                    'store_live_id' => $data['store_live_id'],
                    'signature_live_key' => $data['signature_live_key']
                ];
                $aamarpay = json_encode($aamarpay);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $aamarpay;
            } elseif ($request->identifier == 'tazapay') {
                $tazapay = [
                    'public_key' => $data['public_key'],
                    'api_key' => $data['api_key'],
                    'api_secret' => $data['api_secret']
                ];
                $tazapay = json_encode($tazapay);
                $data = array_splice($data, 0, 4);
                $data['keys'] = $tazapay;
            } elseif ($request->identifier == 'sslcommerz') {
                $sslcommerz = [
                    'store_key'      => $data['store_key'],
                    'store_password'      => $data['store_password'],
                    'store_live_key'      => $data['store_live_key'],
                    'store_live_password'      => $data['store_live_password'],
                    'sslcz_testmode'      => $data['sslcz_testmode'],
                    'store_live_password'      => $data['store_live_password'],
                    'is_localhost'      => $data['is_localhost'],
                    'sslcz_live_testmode'      => $data['sslcz_live_testmode'],
                    'is_live_localhost'      => $data['is_live_localhost']
                ];
                $sslcommerz       = json_encode($sslcommerz);
                $data         = array_splice($data, 0, 4);
                $data['keys'] = $sslcommerz;
            }
            Payment_gateway::where('identifier', $request->identifier)->update($data);
        }

        Session::flash('success', get_phrase('Payment settings update successfully'));
        return redirect(route('admin.payment.settings', ['tab' => $request->identifier]));
    }
    public function language_import(Request $request)
    {
        // Validate the uploaded file
        $request->validate([
            'language_file' => 'required|mimetypes:application/json,text/plain|max:2048',
            'language_id' => 'required|exists:languages,id' // Ensuring language exists
        ]);

        // Get the uploaded file
        $languageFile = $request->file('language_file');

        // Ensure the file is readable
        if (!$languageFile->isValid()) {
            return redirect()->back()->with('error', get_phrase('Uploaded file is not valid.'));
        }

        // Read file content safely
        $content = file_get_contents($languageFile->getPathname());

        // Decode JSON data
        $languageData = json_decode($content, true);

        // Validate JSON structure
        if (json_last_error() !== JSON_ERROR_NONE || !is_array($languageData)) {
            return redirect()->back()->with('error', get_phrase('Invalid JSON format.'));
        }

        // Find the selected language
        $language = Language::find($request->input('language_id'));

        if (!$language) {
            return redirect()->back()->with('error', get_phrase('Language not found.'));
        }

        // Update language phrases based on imported JSON
        foreach ($languageData as $phrase => $translated) {
            if (!is_string($phrase) || !is_string($translated)) {
                continue; // Skip invalid entries
            }

            $languagePhrase = Language_phrase::firstOrCreate([
                'language_id' => $language->id,
                'phrase' => trim($phrase)
            ]);
            $languagePhrase->translated = trim($translated);
            $languagePhrase->save();
        }

        // Return success message
        return redirect()->back()->with('success', get_phrase('Language imported and updated successfully.'));
    }

    public function language_export($id)
    {
        $language = Language::find($id);

        if (!$language) {
            return redirect()->back()->with('error', get_phrase('Language not found'));
        }

        // Fetch the language phrases
        $phrases = Language_phrase::where('language_id', $language->id)->get();

        // Prepare the data to be exported
        $data = [];
        foreach ($phrases as $phrase) {
            $data[$phrase->phrase] = $phrase->translated;
        }

        // Convert the data to JSON
        $jsonData = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

        // Return a proper JSON download response
        return response($jsonData)
            ->header('Content-Type', 'application/json')
            ->header('Content-Disposition', 'attachment; filename="' . $language->name . '.json"');
    }


    public function manage_language()
    {
        return view('admin.setting.language_setting');
    }

    function language_direction_update(Request $request)
    {
        Language::where('id', $request->language_id)->update(['direction' => $request->direction]);
        return true;
    }

    function edit_phrase($lan_id)
    {
        $page_data['phrases'] = Language_phrase::where('language_id', $lan_id)->get();
        $page_data['language'] = Language::where('id', $lan_id)->first();
        return view('admin.setting.edit_phrase', $page_data);
    }

    function update_phrase(Request $request, $phrase_id)
    {
        $translated = $request->translated_phrase;

        Language_phrase::where('id', $phrase_id)->update(['translated' => $translated, 'updated_at' => date('Y-m-d H:i:s')]);
    }

    function phrase_import($lan_id)
    {
        $english_lan_id = Language::where('name', 'like', 'English')->first()->id;
        foreach (Language_phrase::where('language_id', $english_lan_id)->get() as $en_lan_phrase) {
            if (Language_phrase::where('language_id', $lan_id)->where('phrase', $en_lan_phrase->phrase)->count() == 0) {
                Language_phrase::insert(['language_id' => $lan_id, 'phrase' => $en_lan_phrase->phrase, 'translated' => $en_lan_phrase->translated, 'created_at' => date('Y-m-d H:i:s')]);
            }
        }
        return redirect(route('admin.language.phrase.edit', ['lan_id' => $lan_id]));
    }

    public function language_store(Request $request)
    {

        if (Language::where('name', 'like', $request->language)->count() == 0) {
            $new_lan_id = Language::insertGetId(['name' => $request->language, 'direction' => 'ltr']);

            $english_lan_id = Language::where('name', 'like', 'English')->first()->id;

            foreach (Language_phrase::where('language_id', $english_lan_id)->get() as $en_lan_phrase) {
                Language_phrase::insert(['language_id' => $new_lan_id, 'phrase' => $en_lan_phrase->phrase, 'translated' => $en_lan_phrase->translated, 'created_at' => date('Y-m-d H:i:s')]);
            }
            Session::flash('success', get_phrase('Language added successfully'));
        } else {
            Session::flash('error', get_phrase('Language already exists'));
        }

        return redirect()->back();
    }

    function language_delete($id)
    {
        Language::where('id', $id)->delete();
        Language_phrase::where('language_id', $id)->delete();
        Session::flash('success', get_phrase('Language deleted successfully'));
        return redirect()->back();
    }

    public function notification_settings()
    {
        return view('admin.setting.notification_setting');
    }

    public function notification_settings_store(Request $request, $param1 = '', $id = '')
    {
        $data = $request->all();

        if ($param1 == 'smtp_settings') {
            array_shift($data);

            foreach ($data as $key => $item) {
                Setting::where('type', $key)->update(['description' => $item]);
            }

            if (isset($_GET['tab'])) {
                $page_data['tab'] = $_GET['tab'];
            } else {
                $page_data['tab'] = 'smtp-settings';
            }
            Session::flash('success', get_phrase('SMTP setting update successfully'));
        }
        if ($param1 == 'edit_email_template') {
            array_shift($data);
            unset($data['files']);
            $data['subject'] = json_encode($request->subject);
            $data['template'] = json_encode($request->template);
            NotificationSetting::where('id', $id)->update($data);

            if (isset($_GET['tab'])) {
                $page_data['tab'] = $_GET['tab'];
            } else {
                $page_data['tab'] = 'edit_email_template';
            }
            Session::flash('success', get_phrase('Email template update successfully'));
        }

        if ($param1 == 'notification_enable_disable') {

            $id = $request->id;
            $user_type = $request->user_types;
            $notification_type = $request->notification_type;
            $input_val = $request->input_val;
            $notification_setting_row = NotificationSetting::where('id', $id)->first();
            if ($notification_type == 'system') {
                $json_to_arr = json_decode($notification_setting_row->system_notification, true);
                $json_to_arr[$user_type] = $input_val;
                $data['system_notification'] = json_encode($json_to_arr);
            }
            if ($notification_type == 'email') {
                $json_to_arr = json_decode($notification_setting_row->email_notification, true);
                $json_to_arr[$user_type] = $input_val;
                $data['email_notification'] = json_encode($json_to_arr);
            }
            if ($notification_setting_row->is_editable == 1) {
                unset($data['notification_type']);
                unset($data['input_val']);
                unset($data['user_types']);
                NotificationSetting::where('id', $id)->update($data);

                if ($input_val == 1) {
                    $msg = 'Successfully enabled';
                } else {
                    $msg = 'Successfully disabled';
                }
            }
        }

        if ($request->ajax()) {
            return response()->json([
                'status' => 'success',
                'msg' => $msg,
            ]);
        } else {
            return redirect()->back();
        }
    }

    // public function zapier_settings($active_tab = "")
    // {
    //     $page_data = array();
    //     $page_data['zaps'] = ZapierSetting::all();
                                        
    //     $page_data['active_tab'] = !empty($active_tab) ? $active_tab : 'user_registration';

    //     return view('admin.setting.zapier_setting', $page_data);
    // }

    // function zapier_settings_update(Request $request, $slug = "")
    // {
    //     if (!empty($request->all())) {
    //         $updateZap = ZapierSetting::where('slug', $slug)->first();
    //         $updateZap->webhook_url = $request->webhook_url;
    //         $updateZap->status = $request->status;

    //         $updateZap->save();
    //         $page_data = array();
    //         $page_data['zaps'] = ZapierSetting::all();
    //         $page_data['active_tab'] = $slug;

    //         return redirect('/admin/zapier_settings/' . $slug)->with('success', 'Zaps updated Successfully');
    //     }

    //     return redirect()->back()->with('error', 'Seo update failed');
    // }

      // Amazon S3
    public function amazom_s3_settings($active_tab = "")
    {
       $page_data['amazon_s3_data'] = get_settings('amazon_s3', true);
       $page_data['view_path'] = 'setting.amazon_s3_settings';
        return view('admin.setting.amazom_s3_setting', $page_data);
    }

    public function amazom_s3_settings_update(Request $request)
    {
        $data['active'] = $request->active;
        $data['AWS_ACCESS_KEY_ID'] = $request->AWS_ACCESS_KEY_ID;
        $data['AWS_SECRET_ACCESS_KEY'] = $request->AWS_SECRET_ACCESS_KEY;
        $data['AWS_DEFAULT_REGION'] = $request->AWS_DEFAULT_REGION;
        $data['AWS_BUCKET'] = $request->AWS_BUCKET;
        Setting::where('type', 'amazon_s3')->update(['description' => json_encode($data)]);
        Session::flash('success', get_phrase('Amazon s3 settings updated successfully'));
        return redirect()->back();
    }


    public function about()
    {

        $purchase_code = get_settings('purchase_code');
        $returnable_array = array(
            'purchase_code_status' => get_phrase('Not found'),
            'support_expiry_date' => get_phrase('Not found'),
            'customer_name' => get_phrase('Not found'),
        );

        $personal_token = "gC0J1ZpY53kRpynNe4g2rWT5s4MW56Zg";
        $url = "https://api.envato.com/v3/market/author/sale?code=" . $purchase_code;
        $curl = curl_init($url);

        //setting the header for the rest of the api
        $bearer = 'bearer ' . $personal_token;
        $header = array();
        $header[] = 'Content-length: 0';
        $header[] = 'Content-type: application/json; charset=utf-8';
        $header[] = 'Authorization: ' . $bearer;

        $verify_url = 'https://api.envato.com/v1/market/private/user/verify-purchase:' . $purchase_code . '.json';
        $ch_verify = curl_init($verify_url . '?code=' . $purchase_code);

        curl_setopt($ch_verify, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch_verify, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch_verify, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch_verify, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($ch_verify, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');

        $cinit_verify_data = curl_exec($ch_verify);
        curl_close($ch_verify);

        $response = json_decode($cinit_verify_data, true);

        if (is_array($response) && isset($response['verify-purchase']) && count($response['verify-purchase']) > 0) {

            $item_name = $response['verify-purchase']['item_name'];
            $purchase_time = $response['verify-purchase']['created_at'];
            $customer = $response['verify-purchase']['buyer'];
            $licence_type = $response['verify-purchase']['licence'];
            $support_until = $response['verify-purchase']['supported_until'];
            $customer = $response['verify-purchase']['buyer'];

            $purchase_date = date("d M, Y", strtotime($purchase_time));

            $todays_timestamp = strtotime(date("d M, Y"));
            $support_expiry_timestamp = strtotime($support_until);

            $support_expiry_date = date("d M, Y", $support_expiry_timestamp);

            if ($todays_timestamp > $support_expiry_timestamp) {
                $support_status = 'expired';
            } else {
                $support_status = 'valid';
            }

            $returnable_array = array(
                'purchase_code_status' => $support_status,
                'support_expiry_date' => $support_expiry_date,
                'customer_name' => $customer,
                'product_license' => 'valid',
                'license_type' => $licence_type,
            );
        } else {
            $returnable_array = array(
                'purchase_code_status' => 'invalid',
                'support_expiry_date' => 'invalid',
                'customer_name' => 'invalid',
                'product_license' => 'invalid',
                'license_type' => 'invalid',
            );
        }

        $data['application_details'] = $returnable_array;
        return view('admin.setting.about', $data);
    }

    function curl_request($code = '')
    {
        $purchase_code = $code;

        $personal_token = "FkA9UyDiQT0YiKwYLK3ghyFNRVV9SeUn";
        $url = "https://api.envato.com/v3/market/author/sale?code=" . $purchase_code;
        $curl = curl_init($url);

        //setting the header for the rest of the api
        $bearer = 'bearer ' . $personal_token;
        $header = array();
        $header[] = 'Content-length: 0';
        $header[] = 'Content-type: application/json; charset=utf-8';
        $header[] = 'Authorization: ' . $bearer;

        $verify_url = 'https://api.envato.com/v1/market/private/user/verify-purchase:' . $purchase_code . '.json';
        $ch_verify = curl_init($verify_url . '?code=' . $purchase_code);

        curl_setopt($ch_verify, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch_verify, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch_verify, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch_verify, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($ch_verify, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');

        $cinit_verify_data = curl_exec($ch_verify);
        curl_close($ch_verify);

        $response = json_decode($cinit_verify_data, true);

        if (is_array($response) && count($response['verify-purchase']) > 0) {
            return true;
        } else {
            return false;
        }
    }

    function save_valid_purchase_code($action_type, Request $request)
    {
        if ($action_type == 'update') {
            $data['description'] = $request->purchase_code;

            $status = $this->curl_request($data['description']);
            if ($status) {
                Setting::where('type', 'purchase_code')->update($data);
                session()->flash('success', get_phrase('Purchase code has been updated'));
                echo 1;
            } else {
                echo 0;
            }
        } else {
            return view('admin.setting.save_purchase_code');
        }
    }

    function api_configurations()
    {
        return view('admin.api_configuration.index');
    }

    function api_configuration_update(Request $request, $type = "")
    {

        if (Setting::where('type', $type)->count()) {
            Setting::where('type', $type)->update(['description' => $request->$type]);
            Session::flash('success', get_phrase('API updated successfully'));
        } else {
            Setting::where('type', $type)->insert(['type' => $type, 'description' => $request->$type]);
            Session::flash('success', get_phrase('API added successfully'));
        }

        return redirect()->back();
    }

    function certificate()
    {
        return view('admin.certificate.index');
    }

    function certificate_update_template(Request $request)
    {
        $request->validate(['certificate_template' => 'required|image']);

        $row = Setting::where('type', 'certificate_template');

        if ($row->count() > 0) {
            remove_file(get_settings('certificate_template'));
            $path = FileUploader::upload($request->certificate_template, 'uploads/certificate-template', 1000);
            Setting::where('type', 'certificate_template')->update(['description' => $path]);
        } else {
            $path = FileUploader::upload($request->certificate_template, 'uploads/certificate-template', 1000);
            Setting::insert(['type' => 'certificate_template', 'description' => $path]);
        }

        $certificate_builder_content = get_settings('certificate_builder_content');
        if ($certificate_builder_content) {
            // Use regular expression to replace the image source
            $modifiedHtml = preg_replace('/(<img[^>]+src=")([^"]+)(")/', '$1' . get_image($path) . '$3', $certificate_builder_content);
            Setting::where('type', 'certificate_builder_content')->update(['description' => $modifiedHtml]);
        }

        return redirect(route('admin.certificate.settings'))->with('success', get_phrase('Certificate template has been updated'));
    }

    function certificate_builder()
    {
        return view('admin.certificate.builder');
    }

    function certificate_builder_update(Request $request)
    {
        $request->validate(['certificate_builder_content' => 'required']);

        $row = Setting::where('type', 'certificate_builder_content');

        if ($row->count() > 0) {
            Setting::where('type', 'certificate_builder_content')->update(['description' => $request->certificate_builder_content]);
        } else {
            Setting::insert(['type' => 'certificate_builder_content', 'description' => $request->certificate_builder_content]);
        }
        Session::flash('success', get_phrase('Certificate builder template has been updated'));
        return route('admin.certificate.settings');
    }

    //User Review Add
    public function user_review_add()
    {
        $page_data['userList'] = User::where('role', 'student')->get();
        return view('admin.setting.user_review_create', $page_data);
    }
    public function user_review_stor(Request $request)
    {
        $data = $request->all();
        $reviewAdd = new UserReview;
        $reviewAdd['user_id'] = $data['user_id'];
        $reviewAdd['rating'] = $data['rating'];
        $reviewAdd['review'] = $data['review'];
        $reviewAdd->save();
        Session::flash('success', get_phrase('Review added successfull'));
        return redirect()->back();
    }

    public function review_edit($id)
    {
        $page_data["review_data"] = UserReview::find($id);
        $page_data['userList'] = User::where('role', 'student')->get();
        return view("admin.setting.user_review_edit", $page_data);
    }
    public function review_update(Request $request, $id)
    {
        $data = $request->all();
        unset($data['_token']);
        UserReview::where('id', $id)->update($data);
        Session::flash('success', get_phrase('Review Update successfully'));
        return redirect()->route('admin.website.settings');
    }

    public function review_delete($id)
    {
        $query = UserReview::where("id", $id);
        $query->delete();
        Session::flash('success', get_phrase('Review delete successfully'));
        return redirect()->back();
    }

    public function update_home(Request $request, $id)
    {
        $home_page = $request->type;
        if ($home_page == 'cooking') {
            $title = $request->input('title');
            $description = $request->input('description');
            $video_url = $request->input('video_url');
            $speech = [
                'title' => $title,
                'description' => $description,
                'video_url' => $video_url,
                'image' => $request->input('previous_image'),
            ];

            if ($request->hasFile('image')) {
                $image = $request->file('image');
                $image_name = $image->getClientOriginalName();
                FileUploader::upload($request->image, 'uploads/home_page_image/cooking/' . $image_name);
                $speech['image'] = $image_name;

                // Unlink the previous image if it exists
                $previous_image = $request->input('previous_image');
                if (!empty($previous_image)) {
                    $previous_image_path = public_path('uploads/home_page_image/cooking/') . $previous_image;
                    if (file_exists($previous_image_path)) {
                        remove_file($previous_image_path);
                    }
                }
            }
        } elseif ($home_page == 'university') {
            $homePageSetting = HomePageSetting::where('home_page_id', $id)->first();
            $storImage = json_decode($homePageSetting->value, true);

            if ($request->hasFile('image')) {
                $image_name = uniqid() . '.' . $request->file('image')->getClientOriginalExtension();
                FileUploader::upload($request->image, 'uploads/home_page_image/university/' . $image_name);
                $previous_image = $request->input('previous_image');
                $speech['image'] = $image_name;
                if (!empty($previous_image)) {
                    $previous_image_path = public_path('uploads/home_page_image/university/') . $previous_image;
                    if (file_exists($previous_image_path)) {
                        remove_file($previous_image_path);
                    }
                }
            } elseif (!array_key_exists('image', $storImage)) {
                $speech['image'] = 0;
            } else {
                $speech['image'] = $storImage['image'];
            }

            if ($request->hasFile('faq_image')) {
                $image_name = uniqid() . '.' . $request->file('faq_image')->getClientOriginalExtension();
                FileUploader::upload($request->faq_image, 'uploads/home_page_image/university/' . $image_name);
                $speech['faq_image'] = $image_name;
                $previous_images = $request->input('previous_faq_image');
                if (!empty($previous_images)) {
                    $previous_image_path = public_path('uploads/home_page_image/university/') . $previous_images;
                    if (file_exists($previous_image_path)) {
                        remove_file($previous_image_path);
                    }
                }
            } elseif (!array_key_exists('faq_image', $storImage)) {
                $speech['faq_image'] = 0;
            } else {
                $speech['faq_image'] = $storImage['faq_image'];
            }

            $slider_items = array();
            if ($request->previous_slider_items && is_array($request->previous_slider_items) && count($request->previous_slider_items) > 0) {
                foreach ($request->previous_slider_items as $key => $previous_slider_item) {

                    if ($previous_slider_item == 'no') {
                        if ($request->hasFile('slider_items.' . $key)) {
                            $file_path = FileUploader::upload($request->slider_items[$key], 'uploads/home_page_image/university', 1500);
                            if ($file_path)
                                $slider_items[] = $file_path;
                        } else {
                            if (array_key_exists($key, $request->slider_items)) {
                                if ($request->slider_items[$key])
                                    $slider_items[] = $request->slider_items[$key];
                            }
                        }
                    } else {
                        if ($request->hasFile('slider_items.' . $key)) {
                            remove_file($previous_slider_item);
                            $file_path = FileUploader::upload($request->slider_items[$key], 'uploads/home_page_image/university', 1500);
                            if ($file_path)
                                $slider_items[] = $file_path;
                        } else {
                            $slider_items[] = $previous_slider_item;
                        }
                    }
                }
            }
            $speech['slider_items'] = json_encode($slider_items);
        } elseif ($home_page == 'development') {
            $title = $request->input('title');
            $description = $request->input('description');
            $video_url = $request->input('video_url');
            $speech = [
                'title' => $title,
                'description' => $description,
                'video_url' => $video_url,
                'image' => $request->input('previous_image'),
            ];
            if ($request->hasFile('image')) {
                $image = $request->file('image');
                $image_name = uniqid() . '.' . $image->getClientOriginalName();
                FileUploader::upload($request->image, 'uploads/home_page_image/development/' . $image_name);
                $speech['image'] = $image_name;

                // Unlink the previous image if it exists
                $previous_image = $request->input('previous_image');
                if (!empty($previous_image)) {
                    $previous_image_path = public_path('uploads/home_page_image/development/') . $previous_image;
                    if (file_exists($previous_image_path)) {
                        remove_file($previous_image_path);
                    }
                }
            }
        } elseif ($home_page == 'kindergarden') {
            $title = $request->input('title');
            $description = $request->input('description');
            $speech = [
                'title' => $title,
                'description' => $description,
                'image' => $request->input('previous_image'),
            ];
            if ($request->hasFile('image')) {
                $image = $request->file('image');
                $image_name = uniqid() . '.' . $image->getClientOriginalName();
                FileUploader::upload($request->image, 'uploads/home_page_image/kindergarden/' . $image_name);
                $speech['image'] = $image_name;

                // Unlink the previous image if it exists
                $previous_image = $request->input('previous_image');
                if (!empty($previous_image)) {
                    $previous_image_path = public_path('uploads/home_page_image/kindergarden/') . $previous_image;
                    if (file_exists($previous_image_path)) {
                        remove_file($previous_image_path);
                    }
                }
            }
        } elseif ($home_page == 'marketplace') {
            $title = $request->input('title');
            $description = $request->input('description');
            $video_url = $request->input('video_url');
            $instructor = [
                'title' => $title,
                'description' => $description,
                'video_url' => $video_url,
                'image' => $request->input('previous_image'),
            ];
            if ($request->hasFile('image')) {
                $image = $request->file('image');
                $image_name = uniqid() . '.' . $image->getClientOriginalName();
                FileUploader::upload($request->image, 'uploads/home_page_image/marketplace/' . $image_name);
                $instructor['image'] = $image_name;

                // Unlink the previous image if it exists
                $previous_image = $request->input('previous_image');
                if (!empty($previous_image)) {
                    $previous_image_path = public_path('uploads/home_page_image/marketplace/') . $previous_image;
                    if (file_exists($previous_image_path)) {
                        remove_file($previous_image_path);
                    }
                }
            }
            $sliders = $request->slider;
            $marketplace_banner = array();
            foreach ($sliders as $slider) {
                $banner_title_field = 'banner_title' . $slider;
                $banner_description_field = 'banner_description' . $slider;
                $datas['banner_title'] = $request->$banner_title_field;
                $datas['banner_description'] = $request->$banner_description_field;
                array_push($marketplace_banner, $datas);
            }
            $speech['instructor'] = $instructor;
            $speech['slider'] = $marketplace_banner;
        } elseif ($home_page == 'meditation') {
            if ($request->hasFile('big_image')) {
                $image_name = uniqid() . '.' . $request->file('big_image')->getClientOriginalExtension();
                FileUploader::upload($request->big_image, 'uploads/home_page_image/meditation/' . $image_name);
                $previous_image = $request->input('big_previous_image');
                $speech['big_image'] = $image_name;
                if (!empty($previous_image)) {
                    $previous_image_path = public_path('uploads/home_page_image/meditation/') . $previous_image;
                    if (file_exists($previous_image_path)) {
                        remove_file($previous_image_path);
                    }
                }
            } elseif (isset($storImage) && !array_key_exists('big_image', $storImage)) {
                $speech['big_image'] = 0;
            } elseif (isset($storImage)) {
                $speech['big_image'] = $storImage['big_image'];
            } else {
                $speech['big_image'] = $request->input('big_previous_image');
            }


            $meditations = $request->meditation;
            $meditation_array = array();
            foreach ($meditations as $meditation) {
                $meditation_title_field = 'banner_title' . $meditation;
                $meditation_image_field = 'image' . $meditation;
                $meditation_old_image_field = 'old_image' . $meditation;

                $image_name = $request->input($meditation_old_image_field);

                if ($request->hasFile($meditation_image_field)) {
                    $image = $request->file($meditation_image_field);
                    $image_name = uniqid() . '.' . $image->getClientOriginalName();
                    FileUploader::upload($request->image, 'uploads/home_page_image/meditation/' . $image_name);
                    $old_image = $request->input('old_image');
                    $previous_path = public_path('uploads/home_page_image/meditation/') . $old_image;
                    if (file_exists('uploads/home_page_image/meditation/' . $old_image)) {
                        remove_file($previous_path);
                    }
                }
                $meditation_description_field = 'banner_description' . $meditation;
                $stor['banner_title'] = $request->$meditation_title_field;
                $stor['image'] = $image_name;
                $stor['banner_description'] = $request->$meditation_description_field;
                array_push($meditation_array, $stor);
            }
            $speech['meditation'] = $meditation_array;
        }


        $data['home_page_id'] = $id;
        $data['key'] = $home_page;
        $data['value'] = json_encode($speech);
        $homePageSetting = HomePageSetting::where('key', $home_page);
        if ($homePageSetting->first()) {
            $homePageSetting->update($data);
        } else {
            $data['created_at'] = Carbon::now();
            $data['updated_at'] = Carbon::now();
            $homePageSetting->insert($data);
        }
        Session::flash('success', get_phrase('Homepage updated successfully'));
        return redirect()->back();
    }

    public function player_settings()
    {
        return view('admin.setting.player_settings');
    }
    public function player_settings_update(Request $request)
    {
        if ($request->type == 'watermark') {
            $watermark['watermark_width'] = $request->watermark_width;
            $watermark['watermark_height'] = $request->watermark_height;
            $watermark['watermark_top'] = $request->watermark_top;
            $watermark['watermark_left'] = $request->watermark_left;
            $watermark['watermark_opacity'] = $request->watermark_opacity;
            $watermark['watermark_type'] = $request->watermark_type;
            $watermark['watermark_logo'] = $request->watermark_logo;
            $watermark['animation_speed'] = $request->animation_speed;


            $validator = Validator::make($watermark, [
                'watermark_width' => 'required|numeric',
                'watermark_height' => 'required|numeric',
                'watermark_top' => 'required|numeric',
                'watermark_left' => 'required|numeric',
                'watermark_opacity' => 'required|integer|min:0|max:100',
                'watermark_type' => 'required|in:js,ffmpeg',
                'animation_speed' => 'required|numeric',
            ]);

            $validator->sometimes('watermark_logo', 'file|mimes:png,jpg,gif', function ($input) {
                return isset($input->watermark_logo);
            });

            if ($validator->fails()) {
                return redirect()->back()->withErrors($validator)->withInput();
            }

            unset($watermark['watermark_logo']);
            if (isset($request->watermark_logo) && $request->watermark_logo != '') {
                $watermark['watermark_logo'] = "uploads/watermark/" . nice_file_name('watermark', $request->watermark_logo->extension());
                FileUploader::upload($request->watermark_logo, $watermark['watermark_logo']);
            }

            foreach ($watermark as $key => $data) {
                if (!PlayerSettings::where('title', $key)->exists()) {
                    PlayerSettings::insert(['title' => $key, 'description' => $data]);
                    continue;
                }
                PlayerSettings::where('title', $key)->update(['description' => $data]);
            }
        }

        Session::flash('success', get_phrase('Your changes has been saved.'));
        return redirect()->route('admin.player.settings');
    }


    // Gamification Badges Settings
    public function gamification_settings(){
        $page_data['badges'] = Badge::all();
        return view('admin.gamification_badge.index', $page_data);
    }

    public function gamification_badges_store(Request $request)
    {
        $request->validate([
            'type'           => 'required|string',
            'title'          => 'required|string|max:255',
            'condition_from' => 'required|integer|min:0',
            'condition_to'   => 'required|integer|gte:condition_from',
            'description'    => 'required|string',
            'image'          => 'required|image|mimes:jpg,jpeg,png,webp|max:2048',
        ]);

        // Image upload
        if ($request->hasFile('image')) {
            $image = $request->file('image');
            $imageName = time().'_'.$image->getClientOriginalName();
            $image->move(public_path('uploads/badges'), $imageName);
        }

        // Insert data
        Badge::create([
            'type'           => $request->type,
            'title'          => $request->title,
            'condition_from' => $request->condition_from,
            'condition_to'   => $request->condition_to,
            'description'    => $request->description,
            'image'          => $imageName ?? null,
        ]);

        Session::flash('success', get_phrase('Gamification badge created successfully'));

        return redirect()->back();
    }



   public function gamification_badges_update(Request $request, $id)
    {
        // $request->validate([
        //     'type'           => 'required|string',
        //     'title'          => 'required|string|max:255',
        //     'condition_from' => 'required|integer|min:0',
        //     'condition_to'   => 'required|integer|gte:condition_from',
        //     'description'    => 'required|string',
        //     'image'          => 'nullable|image|mimes:jpg,jpeg,png,webp|max:2048',
        // ]);

        $badge = Badge::findOrFail($id);

        // Image upload
        if ($request->hasFile('image')) {
            // Delete old image if exists
            if ($badge->image && file_exists(public_path('uploads/badges/' . $badge->image))) {
                unlink(public_path('uploads/badges/' . $badge->image));
            }

            $image = $request->file('image');
            $imageName = time().'_'.$image->getClientOriginalName();
            $image->move(public_path('uploads/badges'), $imageName);
            $badge->image = $imageName;
        }

        // Update data
        // $badge->type = $request->type;
        $badge->title = $request->title;
        $badge->condition_from = $request->condition_from;
        $badge->condition_to = $request->condition_to;
        $badge->description = $request->description;
        $badge->save();

        Session::flash('success', get_phrase('Gamification badge updated successfully'));

        return redirect()->back();
    }

    public function gamification_badges_delete($id)
    {
        $badge = Badge::findOrFail($id);
        if ($badge->image && file_exists(public_path('uploads/badges/' . $badge->image))) {
            unlink(public_path('uploads/badges/' . $badge->image));
        }
        $badge->delete();
        Session::flash('success', get_phrase('Gamification badge deleted successfully'));
        return redirect()->back();
    }


}
