/* global naseo, jQuery */
(function ($) {
    'use strict';

    // ── Утиліти ──────────────────────────────────────────────────────────────

    function showResult($el, success, message) {
        $el.removeClass('naseo-notice--success naseo-notice--error')
           .addClass(success ? 'naseo-notice--success' : 'naseo-notice--error')
           .html(message)
           .show();
    }

    function setLoading($btn, loading, originalText) {
        if (loading) {
            $btn.data('original-text', $btn.text()).prop('disabled', true).text('⏳ ...');
        } else {
            $btn.prop('disabled', false).text($btn.data('original-text') || originalText);
        }
    }

    window.naseoProAlert = function () {
        alert('Ця функція доступна в Pro версії.\n\nКупити: https://nemynai.lemonsqueezy.com/buy/naseo-pro');
    };

    // ── Генерація статті (Free) ───────────────────────────────────────────────

    $('#naseo-generate-btn').on('click', function () {
        var $btn    = $(this);
        var $result = $('#naseo-generate-result');
        var title   = $('#naseo-title').val().trim();
        var keyword = $('#naseo-keyword').val().trim();
        var lsi     = $('#naseo-lsi').val().trim();

        if (!title || !keyword) {
            showResult($result, false, 'Заповніть заголовок і ключове слово.');
            return;
        }

        setLoading($btn, true);
        $result.hide();

        $.post(naseo.ajax_url, {
            action:       'naseo_generate_single',
            nonce:        naseo.nonce,
            title:        title,
            keyword:      keyword,
            lsi_keywords: lsi,
        })
        .done(function (res) {
            if (res.success) {
                showResult($result, true,
                    '✅ ' + res.data.message +
                    ' <a href="' + res.data.edit_url + '" target="_blank">Редагувати</a> | ' +
                    '<a href="' + res.data.view_url + '" target="_blank">Переглянути</a>'
                );
            } else {
                showResult($result, false, '❌ ' + (res.data.message || naseo.i18n.error));
            }
        })
        .fail(function () {
            showResult($result, false, naseo.i18n.error);
        })
        .always(function () {
            setLoading($btn, false);
        });
    });

    // ── Публікувати зараз (Pro) ──────────────────────────────────────────────

    $('#naseo-publish-now').on('click', function () {
        var $btn    = $(this);
        var $result = $('#naseo-action-result');

        setLoading($btn, true);

        $.post(naseo.ajax_url, {
            action: 'naseo_publish_now',
            nonce:  naseo.nonce,
        })
        .done(function (res) {
            if (res.success) {
                showResult($result, true, '✅ ' + res.data.message);
                setTimeout(function () { location.reload(); }, 2000);
            } else {
                showResult($result, false, '❌ ' + (res.data.message || naseo.i18n.error));
            }
        })
        .fail(function () {
            showResult($result, false, naseo.i18n.error);
        })
        .always(function () {
            setLoading($btn, false);
        });
    });

    // ── Імпорт CSV (Pro) ─────────────────────────────────────────────────────

    $('#naseo-import-btn').on('click', function () {
        var $btn    = $(this);
        var $result = $('#naseo-import-result');
        var file    = $('#naseo-csv-file')[0].files[0];

        if (!file) {
            showResult($result, false, 'Оберіть CSV файл.');
            return;
        }

        var formData = new FormData();
        formData.append('action', 'naseo_import_csv');
        formData.append('nonce', naseo.nonce);
        formData.append('csv_file', file);

        setLoading($btn, true);

        $.ajax({
            url:         naseo.ajax_url,
            type:        'POST',
            data:        formData,
            processData: false,
            contentType: false,
        })
        .done(function (res) {
            if (res.success) {
                showResult($result, true, '✅ ' + res.data.message);
            } else {
                showResult($result, false, '❌ ' + (res.data.message || naseo.i18n.error));
            }
        })
        .fail(function () {
            showResult($result, false, naseo.i18n.error);
        })
        .always(function () {
            setLoading($btn, false);
        });
    });

    // ── Toggle видимості API ключів ──────────────────────────────────────────

    $(document).on('click', '.naseo-toggle-key', function () {
        var targetId = $(this).data('target');
        var $input   = $('#' + targetId);
        if ( $input.hasClass('naseo-masked') ) {
            $input.removeClass('naseo-masked');
            $(this).text('👁');
        } else {
            $input.addClass('naseo-masked');
            $(this).text('🙈');
        }
    });

    // Маскуємо ключі при завантаженні якщо вже збережені
    $('.naseo-api-input').each(function () {
        if ( $(this).val().length > 8 ) {
            $(this).addClass('naseo-masked');
        }
    });

    // ── Збереження API ключів ─────────────────────────────────────────────────

    $('#naseo-save-keys').on('click', function () {
        var $btn    = $(this);
        var $result = $('#naseo-keys-result');
        var claude  = $('#naseo_claude_api_key').val().trim();
        var pexels  = $('#naseo_pexels_api_key').val().trim();

        if ( !claude ) {
            showResult($result, false, '⚠️ Введіть Claude API ключ (починається з sk-ant-)');
            return;
        }
        if ( !pexels ) {
            showResult($result, false, '⚠️ Введіть Pexels API ключ');
            return;
        }

        setLoading($btn, true);

        $.post(naseo.ajax_url, {
            action:               'naseo_save_settings',
            nonce:                naseo.nonce,
            naseo_claude_api_key: claude,
            naseo_pexels_api_key: pexels,
        })
        .done(function (res) {
            if (res.success) {
                showResult($result, true, '✅ API ключі збережено! Можна генерувати статті.');
                // Оновлюємо статус під полями
                $('.naseo-key-status').removeClass('naseo-key-status--empty').addClass('naseo-key-status--ok').text('✅ Ключ збережено');
            } else {
                showResult($result, false, '❌ ' + (res.data.message || naseo.i18n.error));
            }
        })
        .fail(function () {
            showResult($result, false, naseo.i18n.error);
        })
        .always(function () {
            setLoading($btn, false);
        });
    });

    // ── Збереження налаштувань ────────────────────────────────────────────────

    $('#naseo-save-settings').on('click', function () {
        var $btn    = $(this);
        var $result = $('#naseo-settings-result');

        setLoading($btn, true);

        $.post(naseo.ajax_url, {
            action:               'naseo_save_settings',
            nonce:                naseo.nonce,
            naseo_claude_api_key: $('#naseo_claude_api_key').val(),
            naseo_pexels_api_key: $('#naseo_pexels_api_key').val(),
            naseo_language:       $('#naseo_language').val(),
            naseo_author_id:      $('#naseo_author_id').val(),
            naseo_publish_frequency: $('#naseo_publish_frequency').val() || 'daily',
            naseo_custom_prompt:  $('#naseo_custom_prompt').val(),
        })
        .done(function (res) {
            if (res.success) {
                showResult($result, true, '✅ ' + res.data.message);
            } else {
                showResult($result, false, '❌ ' + (res.data.message || naseo.i18n.error));
            }
        })
        .fail(function () {
            showResult($result, false, naseo.i18n.error);
        })
        .always(function () {
            setLoading($btn, false);
        });
    });

    // ── Ліцензія — активація ─────────────────────────────────────────────────

    $('#naseo-activate-license').on('click', function () {
        var $btn    = $(this);
        var $result = $('#naseo-license-result');
        var key     = $('#naseo-license-key').val().trim();

        if (!key) {
            showResult($result, false, 'Введіть ліцензійний ключ.');
            return;
        }

        setLoading($btn, true);

        $.post(naseo.ajax_url, {
            action:      'naseo_activate_license',
            nonce:       naseo.nonce,
            license_key: key,
        })
        .done(function (res) {
            if (res.success) {
                showResult($result, true, '✅ ' + res.data.message);
                setTimeout(function () { location.reload(); }, 1500);
            } else {
                showResult($result, false, '❌ ' + (res.data.message || naseo.i18n.error));
            }
        })
        .fail(function () {
            showResult($result, false, naseo.i18n.error);
        })
        .always(function () {
            setLoading($btn, false);
        });
    });

    // ── Ліцензія — деактивація ───────────────────────────────────────────────

    $('#naseo-deactivate-license').on('click', function () {
        if (!confirm('Деактивувати ліцензію? Pro функції будуть вимкнені.')) return;

        var $btn = $(this);
        setLoading($btn, true);

        $.post(naseo.ajax_url, {
            action: 'naseo_deactivate_license',
            nonce:  naseo.nonce,
        })
        .done(function (res) {
            if (res.success) {
                alert(res.data.message);
                location.reload();
            }
        })
        .always(function () {
            setLoading($btn, false);
        });
    });

    // ── Видалити елемент черги ───────────────────────────────────────────────

    $(document).on('click', '.naseo-delete-item', function () {
        var $btn = $(this);
        var id   = $btn.data('id');
        if ( !confirm('Видалити цей запис з черги?') ) return;

        $btn.prop('disabled', true).text('...');

        $.post(naseo.ajax_url, {
            action: 'naseo_delete_queue_item',
            nonce:  naseo.nonce,
            id:     id,
        })
        .done(function (res) {
            if (res.success) {
                $('#naseo-row-' + id).fadeOut(300, function () { $(this).remove(); });
            } else {
                $btn.prop('disabled', false).text('🗑');
                alert(res.data.message || naseo.i18n.error);
            }
        })
        .fail(function () {
            $btn.prop('disabled', false).text('🗑');
        });
    });

    // ── Очистити логи ────────────────────────────────────────────────────────

    $('#naseo-clear-logs').on('click', function () {
        if (!confirm('Очистити всі логи?')) return;

        var $btn = $(this);
        setLoading($btn, true);

        $.post(naseo.ajax_url, {
            action: 'naseo_clear_logs',
            nonce:  naseo.nonce,
        })
        .done(function (res) {
            if (res.success) {
                location.reload();
            }
        })
        .always(function () {
            setLoading($btn, false);
        });
    });

})(jQuery);
