<?php

namespace FluentForm\App\Services\Integrations;

use Exception;
use FluentForm\Framework\Support\Arr;
class GlobalIntegrationService
{
    
    public function get($attr)
    {
        $settingsKey = sanitize_text_field(Arr::get($attr, 'settings_key'));
        $settings = apply_filters_deprecated(
            'fluentform_global_integration_settings_' . $settingsKey,
            [
                []
            ],
            FLUENTFORM_FRAMEWORK_UPGRADE,
            'fluentform/global_integration_settings_' . $settingsKey,
            'Use fluentform/global_integration_settings_' . $settingsKey . ' instead of fluentform_global_integration_settings_' . $settingsKey
        );
        $settings = apply_filters('fluentform/global_integration_settings_' . $settingsKey, $settings);
        $fieldSettings = apply_filters_deprecated(
            'fluentform_global_integration_fields_' . $settingsKey,
            [
                []
            ],
            FLUENTFORM_FRAMEWORK_UPGRADE,
            'fluentform/global_integration_fields_' . $settingsKey,
            'Use fluentform/global_integration_fields_' . $settingsKey . ' instead of fluentform_global_integration_fields_' . $settingsKey
        );
        $fieldSettings = apply_filters('fluentform/global_integration_fields_' . $settingsKey, $fieldSettings);
        if (!$fieldSettings) {
            $message = __('Sorry! No integration failed found with: ', 'fluentform').$settingsKey;
           return [
               'status' => false,
               'message'=> $message,
               'integration' => $settings,
               'settings'    => $fieldSettings,
           ];
        }
        
        if (!Arr::exists($fieldSettings,'save_button_text')) {
            $fieldSettings['save_button_text'] = __('Save Settings', 'fluentform');
        }
        
        if (!Arr::exists($fieldSettings,'valid_message')) {
            $fieldSettings['valid_message'] = __('Your API Key is valid', 'fluentform');
        }
        
        if (!Arr::exists($fieldSettings,'invalid_message')) {
            $fieldSettings['invalid_message'] = __('Your API Key is not valid', 'fluentform');
        }
        return [
            'status' => true,
            'integration' => $settings,
            'settings'    => $fieldSettings,
        ];
    }
    
    public function isEnabled($integrationKey)
    {
        $globalModules = get_option('fluentform_global_modules_status');
        $isEnabled = $globalModules && isset($globalModules[$integrationKey]) && 'yes' == $globalModules[$integrationKey];

        return apply_filters('fluentform/is_integration_enabled_'.$integrationKey, $isEnabled);
    }

    /**
     * @param $args - key value pair array
     * @throws Exception
     * @return void
     */
    public function updateModuleStatus($args) {
        $moduleKey = sanitize_text_field(Arr::get($args, 'module_key'));
        $moduleStatus = sanitize_text_field(Arr::get($args, 'module_status'));
        if (!$moduleKey || !in_array($moduleStatus, ['yes', 'no'])) {
            // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped -- Exception message, not output
            throw new Exception(__('Status update failed. Not valid module or status', 'fluentform'));
        }
        try {
            $modules = (array)get_option('fluentform_global_modules_status');
            $modules[$moduleKey] = $moduleStatus;
            update_option('fluentform_global_modules_status', $modules, 'no');
        } catch (Exception $e) {
            // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped -- Exception message, not output
            throw new Exception($e->getMessage());
        }
    }
}
