<?php

namespace FluentForm\App\Modules;

use FluentForm\App\Helpers\Helper;
use FluentForm\App\Models\Submission;

class DashboardWidgetModule
{
    /**
     * Constructor - automatically registers cache invalidation hooks
     */
    public function __construct()
    {
        $app = \FluentForm\Framework\Foundation\App::getInstance();

        // Clear dashboard widget cache when a new submission is created or status changes
        $app->addAction('fluentform/submission_inserted', function () {
            delete_transient('fluentform_dashboard_stats_v1');
        });

        $app->addAction('fluentform/before_submission_status_change', function () {
            delete_transient('fluentform_dashboard_stats_v1');
        });
    }

    public function showStat()
    {
        // Check cache first to avoid expensive query on every dashboard load
        $cacheKey = 'fluentform_dashboard_stats_v1';
        $stats = get_transient($cacheKey);

        if (false === $stats) {
            global $wpdb;

            $stats = Submission::select([
                'fluentform_forms.title',
                'fluentform_submissions.form_id',
                wpFluent()->raw('COUNT(' . $wpdb->prefix . 'fluentform_submissions.id) as total'),
                wpFluent()->raw('MAX(' . $wpdb->prefix . 'fluentform_submissions.id) as max_id'),
                wpFluent()->raw("SUM(CASE WHEN {$wpdb->prefix}fluentform_submissions.status = 'unread' THEN 1 ELSE 0 END) as unread_count"),
            ])
                   ->join('fluentform_forms', 'fluentform_forms.id', '=', 'fluentform_submissions.form_id')
                   ->groupBy('fluentform_submissions.form_id')
                   ->orderBy('max_id', 'DESC')
                   ->limit(10)
                   ->get();

            // Cache for 5 minutes to reduce database load
            set_transient($cacheKey, $stats, 10 * MINUTE_IN_SECONDS);
        }

        if ( ! $stats || $stats->isEmpty()) {
            echo 'You can see your submission stats here';
            return;
        }

        $this->printStats($stats);
    }


    private function printStats($stats)
    {
        ?>
        <ul class="ff_dashboard_stats">
            <?php foreach ($stats as $stat): ?>
            <li>
                <a
                    href="<?php echo esc_url(admin_url('admin.php?page=fluent_forms&route=entries&form_id=' . $stat->form_id)); ?>">
                    <?php echo esc_html($stat->title); ?>
                    <span class="ff_total"><?php echo esc_attr($stat->unread_count); ?>/<?php echo esc_attr($stat->total); ?></span>
                </a>
            </li>
            <?php endforeach; ?>
        </ul>
        <?php if (!defined('FLUENTCRM') && !defined('FLUENTFORMPRO')) : ?>
        <div class="ff_recommended_plugin">
            Recommended Plugin: <b>FluentCRM - Email Marketing Automation For WordPress</b> <br />
            <a
                href="<?php echo esc_url($this->getInstallUrl('fluent-crm')); ?>">Install</a>
            | <a target="_blank" rel="noopener" href="https://wordpress.org/plugins/fluent-crm/">Learn More</a>
        </div>
        <?php endif; ?>
        <style>
            ul.ff_dashboard_stats {
                margin: 0;
                padding: 0;
                list-style: none;
            }

            ul.ff_dashboard_stats li {
                padding: 8px 12px;
                border-bottom: 1px solid #eeeeee;
                margin: 0 -12px;
                cursor: pointer;
            }

            ul.ff_dashboard_stats li:hover {
                background: #fafafa;
                border-bottom: 1px solid #eeeeee;
            }

            ul.ff_dashboard_stats li:hover a {
                color: black;
            }

            ul.ff_dashboard_stats li:nth-child(2n+2) {
                background: #f9f9f9;
            }

            ul.ff_dashboard_stats li span.ff_total {
                float: right;
            }

            ul.ff_dashboard_stats li a {
                display: block;
                color: #0073aa;
                font-weight: 500;
                font-size: 105%;
            }

            .ff_recommended_plugin {
                padding: 15px 0px 0px;
            }
            
            .ff_recommended_plugin a {
                font-weight: bold;
                font-size: 110%;
            }
        </style>
        <?php
    }

    private function getInstallUrl($plugin)
    {
        return wp_nonce_url(
            self_admin_url('update.php?action=install-plugin&plugin=' . $plugin),
            'install-plugin_' . $plugin
        );
    }
}
