/**
 * Freefactu Presupuestos Extension
 *
 * Handles presupuesto (quote) creation, conversion to invoice, and series management.
 *
 * @package Freefactu
 * @since 1.3.0
 */

jQuery(document).ready(function ($) {
    'use strict';

    // Bail early if params not available (extension not active)
    if (typeof freefactu_presupuestos_params === 'undefined') {
        return;
    }

    var params = freefactu_presupuestos_params;

    // ============================================================================
    // PRESUPUESTO CREATION
    // ============================================================================

    // Create presupuesto
    $(document).on('click', '.freefactu-presupuesto-action:not(.exists):not(.converted)', function (e) {
        e.preventDefault();
        var orderId = $(this).data('order-id');
        var button = $(this);

        button.addClass('loading');

        $.ajax({
            url: ajaxurl,
            type: 'POST',
            data: {
                action: 'freefactu_create_presupuesto',
                order_id: orderId,
                nonce: params.nonce
            },
            success: function (response) {
                if (response.success) {
                    // Redirect directly to PDF
                    window.location.href = response.data.download_url;
                } else {
                    alert(response.data.message || params.i18n.error || 'Error');
                }
            },
            error: function () {
                alert(params.i18n.connection_error || 'Error de conexión');
            },
            complete: function () {
                button.removeClass('loading');
            }
        });
    });

    // Note: Existing presupuestos (.exists, .converted) have direct href links
    // No JavaScript handler needed - the anchor tag navigates directly to PDF

    // ============================================================================
    // CONVERT TO INVOICE
    // ============================================================================

    $(document).on('click', '.freefactu-convert-to-invoice', function (e) {
        e.preventDefault();

        var confirmMessage = params.i18n.confirm_convert || '¿Convertir este presupuesto a factura?';
        if (!confirm(confirmMessage)) {
            return;
        }

        var button = $(this);
        var presupuestoId = button.data('presupuesto-id');
        var orderId = button.data('order-id');

        button.prop('disabled', true);

        $.ajax({
            url: ajaxurl,
            type: 'POST',
            data: {
                action: 'freefactu_convert_to_invoice',
                nonce: params.nonce,
                presupuesto_id: presupuestoId,
                order_id: orderId
            },
            success: function (response) {
                if (response.success) {
                    alert(response.data.message);
                    location.reload();
                } else {
                    alert(response.data.message || params.i18n.error || 'Error');
                }
            },
            error: function () {
                alert(params.i18n.connection_error || 'Error de conexión');
            },
            complete: function () {
                button.prop('disabled', false);
            }
        });
    });

    // ============================================================================
    // PRESUPUESTO SERIES MANAGEMENT
    // ============================================================================

    // Open presupuesto series creation dialog
    $(document).on('click', '.freefactu-new-presupuesto-series-btn', function (e) {
        e.preventDefault();
        // Clear form
        $('#freefactu-presupuesto-series-name').val('');
        $('#freefactu-presupuesto-series-prefix').val('');
        $('#freefactu-presupuesto-series-suffix').val('');
        $('#freefactu-presupuesto-series-padding').val(4);
        updatePresupuestoSeriesPreview();
        $('#freefactu-presupuesto-series-dialog').css('display', 'flex').hide().fadeIn(200);
    });

    // Close presupuesto series dialog
    $(document).on('click', '.freefactu-close-presupuesto-dialog, #freefactu-presupuesto-series-dialog', function (e) {
        if (e.target === this) {
            $('#freefactu-presupuesto-series-dialog').fadeOut(150);
        }
    });

    // Update presupuesto series preview
    function updatePresupuestoSeriesPreview() {
        var prefix = $('#freefactu-presupuesto-series-prefix').val() || '';
        var suffix = $('#freefactu-presupuesto-series-suffix').val() || '';
        var padding = parseInt($('#freefactu-presupuesto-series-padding').val()) || 4;

        // Replace date placeholders for preview
        var now = new Date();
        prefix = prefix.replace(/\[year\]/gi, now.getFullYear());
        prefix = prefix.replace(/\[month\]/gi, ('0' + (now.getMonth() + 1)).slice(-2));
        prefix = prefix.replace(/\[day\]/gi, ('0' + now.getDate()).slice(-2));
        suffix = suffix.replace(/\[year\]/gi, now.getFullYear());
        suffix = suffix.replace(/\[month\]/gi, ('0' + (now.getMonth() + 1)).slice(-2));
        suffix = suffix.replace(/\[day\]/gi, ('0' + now.getDate()).slice(-2));

        var number = '1'.padStart(padding, '0');
        $('#freefactu-presupuesto-preview-number').text(prefix + number + suffix);
    }

    $(document).on('input', '.freefactu-presupuesto-series-input', updatePresupuestoSeriesPreview);

    // Presupuesto series form submission
    $(document).on('submit', '#freefactu-presupuesto-series-form', function (e) {
        e.preventDefault();
        var theForm = $(this);
        var submitBtn = theForm.find('button[type="submit"]');
        var originalBtnHtml = submitBtn.html();

        var name = $('#freefactu-presupuesto-series-name').val().trim();
        if (!name) {
            alert(params.i18n.enter_name || 'Por favor, introduce un nombre.');
            return;
        }

        submitBtn.prop('disabled', true).html('<span class="dashicons dashicons-update spin"></span> ' + (params.i18n.creating || 'Creando...'));

        $.ajax({
            url: ajaxurl,
            type: 'POST',
            data: {
                action: 'freefactu_presupuesto_create_series',
                security: params.series_nonce,
                name: name,
                prefix: $('#freefactu-presupuesto-series-prefix').val(),
                suffix: $('#freefactu-presupuesto-series-suffix').val(),
                padding: $('#freefactu-presupuesto-series-padding').val()
            },
            success: function (response) {
                if (response.success) {
                    location.reload();
                } else {
                    alert(response.data.message || params.i18n.error_creating_series || 'Error al crear la serie');
                    submitBtn.prop('disabled', false).html(originalBtnHtml);
                }
            },
            error: function () {
                alert(params.i18n.connection_error || 'Error de conexión');
                submitBtn.prop('disabled', false).html(originalBtnHtml);
            }
        });
    });

    // Presupuesto series radio selection
    $(document).on('change', '.freefactu-presupuesto-series-radio', function () {
        var seriesId = $(this).val();
        $('.freefactu-presupuesto-series-radio').prop('disabled', true);

        $.ajax({
            url: ajaxurl,
            type: 'POST',
            data: {
                action: 'freefactu_presupuesto_set_active_series',
                security: params.series_nonce,
                series_id: seriesId
            },
            success: function (response) {
                location.reload();
            },
            error: function () {
                alert(params.i18n.connection_error || 'Error de conexión');
                $('.freefactu-presupuesto-series-radio').prop('disabled', false);
            }
        });
    });

    // Delete presupuesto series
    $(document).on('click', '.freefactu-delete-presupuesto-series-btn', function (e) {
        e.preventDefault();
        e.stopPropagation();

        var confirmMessage = params.i18n.confirm_delete_series || '¿Eliminar esta serie?';
        if (!confirm(confirmMessage)) {
            return;
        }

        var deleteBtn = $(this).prop('disabled', true);
        $.ajax({
            url: ajaxurl,
            type: 'POST',
            data: {
                action: 'freefactu_presupuesto_delete_series',
                security: params.series_nonce,
                series_id: deleteBtn.data('series-id')
            },
            success: function (response) {
                if (response.success) {
                    location.reload();
                } else {
                    alert(response.data.message || params.i18n.error_deleting_series || 'Error al eliminar');
                    deleteBtn.prop('disabled', false);
                }
            },
            error: function () {
                alert(params.i18n.connection_error || 'Error de conexión');
                deleteBtn.prop('disabled', false);
            }
        });
    });
});
