<?php

namespace FluentForm\App\Services\Integrations\Slack;

defined('ABSPATH') or die;

use FluentForm\App\Helpers\Helper;
use FluentForm\Framework\Foundation\Application;
use FluentForm\Framework\Helpers\ArrayHelper as Arr;

class SlackNotificationActions
{
    protected $app = null;

    public function __construct(Application $app)
    {
        $this->app = $app;
//        add_filter('fluentform/notifying_async_slack', '__return_false');
    }

    public function register()
    {
        add_filter('fluentform/global_notification_active_types', function ($types) {
            $isEnabled = Helper::isSlackEnabled();
            if ($isEnabled) {
                $types['slack'] = 'slack';
            }
            return $types;
        });
        add_action('fluentform/integration_notify_slack', [$this, 'notify'], 20, 4);
        add_filter('fluentform/get_meta_key_settings_response', function ($response, $formId, $key) {
            if ('slack' == $key) {
                $formApi = fluentFormApi()->form($formId);
                $response['formattedFields'] = array_values($formApi->labels());
            }

            return $response;
        }, 10, 3);
    }

    public function notify($feed, $formData, $entry, $form)
    {
        $isEnabled = Helper::isSlackEnabled();
        if (! $isEnabled) {
            return;
        }
        $response = Slack::handle($feed, $formData, $form, $entry);
        if ('success' === Arr::get($response, 'status')) {
            do_action('fluentform/integration_action_result', $feed, 'success',
                __('Slack feed has been successfully initialed and pushed data', 'fluentform'));
        } else {
            $error = Arr::get($response, 'message');
            do_action('fluentform/integration_action_result', $feed, 'failed', $error);
        }
    }
}
