$(document).ready(function() {
	// funciones fuera del formulario

	$(document).on('click', '.badge.ps-id', function() {
		// Al hacer click en badge ps id debe abrir una nueva pestaña con la url de ps
		let ps_id = $(this).data('ps-id');
		let token = $('#psToken').val();
		let url = 'https://dementegames.cl/admin161m0dq8h/index.php?controller=AdminOrders&vieworder&id_order=' + ps_id + '&token=' + token;
		window.open(url, '_blank');
	});

	// Setea menú para cambiar estado de venta en listado
	$(".estado-venta-shortcut" ).menu({
		position: { my: "left top-22px", at: "left-30 bottom+6" }
	});

	// Algo hará o no?
	$("body").off("over", ".ui-widget");

	// Setea cambio de estado desde menú
	$(document).on('click', '.change-state', function() {
		let estado = $(this).html();
		let id_venta = $(this).parent().data('id');
		
		let id_estado = $(this).data('id-estado');
		$(this).parent().fadeOut(100);
		
		cambiaEstado(id_venta, id_estado, estado);
	});

	// Mostrar modal para enviar boleta
	$('#modalBoleta').on('show.bs.modal', function (event) {
		$('.modal-wait').hide();
		let button = $(event.relatedTarget)
		let modal = $(this);
		
		//modal.find('#editarVenta').removeAttr('disabled');
		if (button.data('id') > 0) {
			let parametros = {
				id : button.data('id')
			};

			$.ajax({
				data:  parametros,
				url:   '/ventas/boleta',
				type:  'post',
				beforeSend: function () {
				},
				success:  function (response) {
					venta = JSON.parse(response);
					modal.find('#idVentaEboleta').val(venta.id);
					modal.find('#nombreEboleta').html(venta.cliente);
					modal.find('#idPs').html(venta.ps_id);
					modal.find('#nroEboleta').html(venta.boleta);
					modal.find('#fechaEboleta').html(convertDate(venta.fecha_boleta));
					modal.find('#totalEboleta').html('$' + clp(venta.total));
					modal.find('#emailEboleta').html(venta.email);
					modal.find('#linkEboleta').html(venta.link_boleta);
					
					$('.modal-wait').show();
				}
			});
		}
	});

	$("#enviarBoleta" ).click(function() {
		let button = $(this);
		button.attr('disabled', 'disabled');
		button.html('Enviando');
		let id = $('#idVentaEboleta').val()
		let parametros = {
			id : id
		};

		$.ajax({
			data:  parametros,
			url:   '/ventas/enviar_boleta',
			type:  'post',
			beforeSend: function () {
			},
			success:  function (response) {
				response = JSON.parse(response);
				let id = $('#idVenta').val();
				if (response.status == 'success') {
					
					let venta = $('#venta' + response.id_venta);
					let boleta = venta.find('.boleta');
					boleta.removeClass('badge-warning');
					boleta.removeClass('badge-danger');
					boleta.addClass('badge-success');
					venta.find('.send-invoice .fa-envelope').remove();
					button.removeAttr('disabled');
					button.html('Enviar');
					$('#modalBoleta').modal('hide');
				}
				else {
					console.log('Error');
					console.log(response);
					button.removeAttr('disabled');
					button.html('Enviar');
					if (id == 0) {
						button.html('Enviar');
					}
				}
			}
		});
	});

	// Mostrar modal para enviar encuesta
	$('#modalEncuesta').on('show.bs.modal', function (event) {
		$('.modal-wait').hide();
		let button = $(event.relatedTarget)
		let modal = $(this);
		
		//modal.find('#editarVenta').removeAttr('disabled');
		if (button.data('id') > 0) {
			let parametros = {
				id : button.data('id')
			};

			$.ajax({
				data:  parametros,
				url:   '/ventas/encuesta',
				type:  'post',
				beforeSend: function () {
				},
				success:  function (response) {
					venta = JSON.parse(response);
					modal.find('#idVentaEncuesta').val(venta.id);
					modal.find('#nombreEncuesta').html(venta.cliente);
					modal.find('#emailEncuesta').html(venta.email);
					if (typeof venta.fecha_encuesta != 'undefined') {
						modal.find('#fechaEncuesta').html(convertDateTime(venta.fecha_encuesta));
					}
					else {
						modal.find('#fechaEncuesta').html('Nunca');
					}
					if (venta.tiempo_espera == 1) {
						modal.find('.tiempo-espera').removeClass('text-danger');
						modal.find('.tiempo-espera').addClass('text-success');
					}
					else {
						modal.find('.tiempo-espera').removeClass('text-success');
						modal.find('.tiempo-espera').addClass('text-danger');
					}
					$('.modal-wait').show();
				}
			});
		}
	});

	$("#enviarEncuesta" ).click(function() {
		let button = $(this);
		button.attr('disabled', 'disabled');
		button.html('Enviando');
		let id = $('#idVentaEncuesta').val();

		let parametros = {
			id : id
		};

		$.ajax({
			data:  parametros,
			url:   '/ventas/enviar_encuesta',
			type:  'post',
			beforeSend: function () {
			},
			success:  function (response) {
				response = JSON.parse(response);
				let id = $('#idVenta').val();
				if (response.status == 'success') {
					let venta = $('#venta' + response.id_venta);
					venta.find('.send-form .fas').remove();
					button.removeAttr('disabled');
					button.html('Enviar');
					$('#modalEncuesta').modal('hide');
				}
				else {
					console.log('Error');
					console.log(response);
					button.removeAttr('disabled');
					button.html('Enviar');
					if (id == 0) {
						button.html('Enviar');
					}
				}
			}
		});
	});

	
	// Abre modal para crear
	$('#modalVenta').on('show.bs.modal', function (event) {
		$('.modal-wait').hide();
		let button = $(event.relatedTarget)
		let modal = $(this);
		limpiaModal(modal);
		modal.find('#editarVenta').removeAttr('disabled');

		// Solo ventas presenciales
		if (button.data('channel') == 2 || button.data('channel') == 4 || button.data('channel') == 7 || button.data('channel') == 8 || button.data('channel') == 12) {
			$('#headerVenta .card-container').hide();
			$('#headerVenta .card-container .form-group').hide();
			$('.show-presencial').show();
			$('.select-id-canal').val(button.data('channel'));
			$('.select-id-canal').parent().hide();
			$('.check-crea-cliente').parent().hide();
			actualizaMedioPago();
			$('.input-numero-operacion').parent().hide();
			$('.select-id-transportista').val(1);
			$('.datos-despacho').hide();
		}

		// Descuenta Stock de PS en CIté y 1601
		if (button.data('channel') == 1){
			$('.check-descuenta-stock').parent().show();
		}

		// Descuenta Stock de PS en Cité y 1601
		if (button.data('channel') == 2 || button.data('channel') == 7){
			$('.check-descuenta-stock').prop('checked', true);
		}

		if (button.data('channel') == 2) {
			$('.select-id-transportista').val(1);
		}

		if (button.data('channel') == 7) {
			$('.select-id-transportista').val(26);
		}

		if (button.data('channel') == 8) {
			$('.select-id-transportista').val(28);
		}

		if (button.data('channel') == 12) {
			$('.select-id-transportista').val(32);
		}
		// Solo ventas Mercado Libre o Falabella
		if (button.data('channel') == 3) {
			$('#headerVenta .card-container').hide();
			$('#headerVenta .card-container .form-group').hide();
			$('.show-ml').show();
			$('.select-id-canal').val(3);
			$('.select-id-canal').parent().show();
			actualizaMedioPago();
			$('.select-id-medio-pago').val(7);
			$('.select-estado-venta').val(2);
			$('.check-descuenta-stock').prop('checked', true);
			$('.datos-despacho').hide();
			$('.select-id-tipo-documento').val(12);
		}

		// Solo ventas ferias
		if (button.data('channel') == 4) {
			$('#headerVenta .card-container').hide();
			$('#headerVenta .card-container .form-group').hide();
			$('.show-presencial').show();
			$('.select-id-canal').val(4);
			$('.select-id-canal').parent().hide();
			actualizaMedioPago();
			$('.input-numero-operacion').parent().hide();
			$('.check-descuenta-stock').parent().hide();
			$('.select-id-transportista').val(20);
			$('.datos-despacho').hide();
		}

		// Solo Notas de crédito
		if (button.data('channel') == 6) {
			$('#headerVenta .card-container').hide();
			$('#headerVenta .card-container .form-group').hide();
			$('.show-nc').show();

			$('.select-id-medio-pago').val(9);
			$('.select-id-canal').val(6);
			$('.select-id-tipo-venta').val(3);
			$('.select-id-transportista').val(23);
			$('.select-id-tipo-documento').val(3);
			$('.check-boleta-lista').prop('checked', true);
			$('.datos-despacho').hide();
		}

		if (button.data('ps-id') > 0){
			// Importar venta de PS
			// Llena el campo ps_id y aplica change
			modal.find('.input-ps-id').val(button.data('ps-id'));
			cargaPs(button.data('ps-id'));
			$('.modal-wait').show();
		}
		else {
			if (button.data('id') == 0){
				// Venta Nueva
				$('#eliminarVenta').hide();
				modal.find('.modal-title').html('Crear');
				modal.find('#editarVenta').html('Crear');
				agregaProducto();
				$('.modal-wait').show();

				// Solo para ventas presenciales nuevas se acumulará puntos
				if (button.data('channel') == 2 || button.data('channel') == 4 || button.data('channel') == 7 || button.data('channel') == 8 || button.data('channel') == 12) {
					modal.find('.input-acumular-puntos').val(1);
				}

				// Para tienda y feria focusea primer input producto
				if (button.data('channel') == 2 || button.data('channel') == 4 || button.data('channel') == 7 || button.data('channel') == 8 || button.data('channel') == 12) {
					var intervalo = setInterval(function() {
						var elemento = modal.find('.input-producto:first');
						if (elemento.is(':visible')) {
						  elemento.focus();
						  clearInterval(intervalo);
						}
					  }, 30);
				}
			}
			else {
				// Editar Venta
				$('#eliminarVenta').show();
				modal.find('.modal-title').html('Editar');
				modal.find('#editarVenta').html('Editar');
				let parametros = {
					id : button.data('id')
				};

				// Consulta datos de venta
				$.ajax({
					data:  parametros,
					url:   '/ventas/get',
					type:  'post',
					beforeSend: function () {
					},
					success:  function (response) {
						cargaDatos(modal, response);
					}
				});
			}
		}
	});

	//*************************** Funciones dentro del formulario ******************************//
	$('.input-email').autocomplete({
		source: function( request, response ) {
			// Limpia campos relacionados a cliente
			$('.input-cliente').val('');
			$('.input-id-cliente').val('');
			$('.div-apellidos').hide();
			$('.input-apellidos').val('');
			$('.div-ps-id-cliente').show();
			$('.input-ps-id-cliente').val('');
			$('.div-crea-cliente').hide();
			$('.check-crea-cliente').prop('checked', false);
			//$('.check-newsletter').prop('checked', false).attr('disabled', 'disabled');
			$('.select-newsletter').val("-1").attr('disabled', 'disabled');
			$('.check-utiliza-puntos').prop('checked', false);
			$('.input-descuento-puntos').val('');

			$.ajax( {
				url: 'clientes/ac_emails',
				dataType: "jsonp",
				data: {
					term: request.term
				},
				success: function( data ) {
					response( data );
				}
			} );
		},
		minLength: 2,
		select: function( event, ui ) {
			//console.log( "Selected: " + ui.item.value + " aka " + ui.item.id );
			$('.input-id-cliente').val(ui.item.id);
			$('.input-cliente').val(ui.item.nombre);
			$('.input-ps-id-cliente').val(ui.item.ps_id);
			$(this).blur();
		}
	});

	// Carga info de cliente por email
	$('.input-email').change(function() {
		let form = $(this).closest('.form-venta');
		if ($('.input-id-cliente').val() != '') {
			$(this).addClass('found').removeClass('not-found');

			totalPuntos(form);
			revisaPuntos(form);
			totalVenta(form);
		}

		if ($('.input-ps-id-cliente').val() == ''){
			// Busca si cliente se encuentra registrado en PS
			buscaCliente($('.input-email').val());
		}
	});

	$('.check-crea-cliente').change(function(){
		let checkCliente = $(this).is(':checked');
		// Si nuevo estado tiene check se muestra apellido y se esconde PS ID cliente
		if (checkCliente) {
			$('.div-apellidos').show();
			$('.div-ps-id-cliente').hide();
			//$('.check-newsletter').removeAttr('disabled');
			$('.select-newsletter').removeAttr('disabled');
		}
		// Si nuevo estado NO tiene check se esconde apellido y se muestra PS ID cliente
		else {
			$('.div-apellidos').hide();
			$('.div-ps-id-cliente').show();
		}

		let form = $(this).closest('.form-venta');
		totalPuntos(form);
	});

	$('.select-id-medio-pago').change(function() {
		var idCanal = $('.select-id-canal').val();
		var inputId = $('.input-id').val();

		// Solo para ventas nuevas de Tienda o Feria se setea tipo de documento según medio de pago
		if ((idCanal == 2 || idCanal == 4 || idCanal == 7 || idCanal == 8 || idCanal == 12) && inputId == 0) {
			var medioDePago = $(this).val();
			$('.input-numero-operacion').prop('required', false).parent().hide();
			// Transferencia y Efectivo
			if (medioDePago == 2 || medioDePago == 5) {
				$('.select-id-tipo-documento').val(5);
				$('.input-numero-operacion').prop('required', true).parent().show();
			}
			// Sumup
			if (medioDePago == 3) {
				$('.select-id-tipo-documento').val(9);
				$('.input-numero-operacion').prop('required', true).parent().show();
			}
			// Transbank
			if (medioDePago == 8) {
				$('.select-id-tipo-documento').val(8);
				$('.input-numero-operacion').prop('required', true).parent().show();
			}
		}
	});

	$('.select-id-tipo-documento').change(function() {
		tipoDocumento($(this).val());
	});

	// Actualiza stock de almacen según transportista seleccionado
	$('.select-id-transportista').change(function() {
		$('.articulo-venta').each(function() {
			let articulo = $(this);
			actualizaStock(articulo);
		});
	});

	// Carga datos del producto
	$(document).on('change', '.input-producto', function() {
		//console.log('Carga datos del producto');
		let input_producto = $(this);
		let articulo = $(this).closest('.articulo-venta');
		let id_producto = articulo.find('.input-id-producto').val();
		//console.log(id_producto);
		articulo.find('.select-descuento-porcentual').val('');

		// Si no hay id, intenta buscar por código de barras via AJAX
		if (id_producto == '') {
			agregaProducto();
			buscaCodigo(input_producto.val(), articulo, function(result) {
				console.log("Resultado buscaCodigo:", result);

				if (result === 'encontrado') {
					id_producto = articulo.find('.input-id-producto').val();
					// Ahora que tenemos el id, cargamos la info completa
					cargaInfoProducto(id_producto, articulo, input_producto);
				} 
				else if (result === 'aumentado') {
					// No necesitas seguir, ya sumaste cantidad
					return;
				} 
				else {
					// No encontrado
					articulo.find('.input-id-producto').val('');
					input_producto.val('No Encontrado');
					input_producto.addClass('not-found').removeClass('found');
				}
			});
		} else {
			// Si ya tenías id, carga info por AJAX
			cargaInfoProducto(id_producto, articulo, input_producto);
		}

		/*
		//Si existe el id_producto llama sus datos por ajax
		if (id_producto != '') {
			var response = infoProducto(id_producto);
		}

		if (response.success) {
			console.log('Entra en success');
			let idCanal = $('.select-id-canal').val();
			$(this).addClass('found').removeClass('not-found');
			articulo.find('.input-precio-normal').val(info_producto['precio_normal']);
			
			// Para tienda y feria carga precios y descuentos de tienda
			if (idCanal == 2 || idCanal == 4 || idCanal == 7 || idCanal == 8 || idCanal == 12) {
				articulo.find('.input-descuento-producto').val(info_producto['descuento_tienda']);
				articulo.find('.input-precio').val(info_producto['precio_tienda']);
			}
			else {
				articulo.find('.input-descuento-producto').val(info_producto['descuento']);
				articulo.find('.input-precio').val(info_producto['precio']);
			}

			actualizaStock(articulo);

			if (articulo.find('.input-cantidad').val() == 0) {
				articulo.find('.input-cantidad').val(1);
			}
			totalProducto(articulo);
			cargaImagen(articulo);
			agregaProducto();

		}
		else {
			// En caso de tab no se aplica el autocomplete
			articulo.find('.input-id-producto').val('');
			$(this).addClass('not-found').removeClass('found');
			input_producto.val('No Encontrado');
		}
		*/
	});

	// Agrega un producto en blanco a la lista
	$(".add-product").click(function() { 
		agregaProducto();
	});

	// Al editar cantidad de un producto => Calcula total de producto
	$(document).on('change', '.input-cantidad', function() {
		if ($(this).val() == 0) {
			$(this).val('1');
		}
		let articulo = $(this).closest('.articulo-venta');
		totalProducto(articulo);
	});

	// Al editar precio de producto => Calcula total de producto
	$(document).on('change', '.input-precio-normal', function() {
		let articulo = $(this).closest('.articulo-venta');
		articulo.find('.select-descuento-porcentual').val('');
		totalProducto(articulo);
	});

	// Al editar descuento porcentual de producto => Calcula descuento en pesos y total de producto
	$(document).on('change', '.select-descuento-porcentual', function() {
		let articulo = $(this).closest('.articulo-venta');
		let precio = parseInt(articulo.find('.input-precio-normal').val());
		let descuentoPorcentual = parseInt($(this).val());
		if (descuentoPorcentual > 0) {
			var descuento = Math.floor((descuentoPorcentual / 100) * precio);
		}
		else {
			var descuento = 0;
		}
		articulo.find('.input-descuento-producto').val(descuento);
		totalProducto(articulo);
	});

	// Al editar descuento de producto => Calcula total de producto
	$(document).on('change', '.input-descuento-producto', function() {
		let articulo = $(this).closest('.articulo-venta');
		articulo.find('.select-descuento-porcentual').val('');
		totalProducto(articulo);
	});

	// Al eliminar producto => Calcula total de venta
	$(document).on('click', '.btn-delete', function() {
		let articulo = $(this).closest('.articulo-venta');
		let form = $(this).closest('.form-venta');
		articulo.remove();
		totalVenta(form);
		if ($('.lista-productos .articulo-venta').length == 0) {
			agregaProducto();
		}
	});

	// Al aplicar descuento a la venta => Recalcula total de venta
	$(document).on('change', '.input-descuento', function() {
		let form = $(this).closest('.form-venta');
		totalVenta(form);
	});

	// Al cambiar monto pagado => Calcula deuda
	$(document).on('change', '.input-pagado', function() {
		let form = $(this).closest('.form-venta');
		totalDeuda(form);
	});

	// Al cambiar monto pagado => Calcula deuda
	$(document).on('change', '.check-utiliza-puntos', function() {
		if ($('.check-utiliza-puntos').is(':checked')) {
			let puntos = $('.puntos-disponibles b').html().replace('.', '');
			$('.input-descuento-puntos').val(puntos);
		}
		else {
			$('.input-descuento-puntos').val('');
		}
		let form = $(this).closest('.form-venta');
		totalVenta(form);
	});


	// Al cambiar región actualiza select de comunas
	$(document).on('change', '.select-id-region', function() {
		let id_region = $('.select-id-region').val();
		actualizaComunas(id_region);
	});

	// Evita submit de formulario
	$("#formVenta").submit(function( event ) {
		event.preventDefault();
	});

	// Guardar en DB y editar DOM de listado
	// Guardar en DB y editar DOM de listado
$("#editarVenta").click(function () {
    const button = $(this);
    const id = $('#idVenta').val();
    const $form = $('#formVenta');
    const $alert = $('.alert-venta');

    $alert.empty().hide();

    // --- VALIDACIÓN NEWSLETTER SOLO SI NO ESTÁ DISABLED ---
    const $newsletter = $form.find('select.select-newsletter');
    if (!$newsletter.prop('disabled')) {
        const newsletterVal = $newsletter.val();
        if (!newsletterVal || newsletterVal === "-1") {
            $alert.html('DebeS seleccionar si el cliente desea recibir ofertas y novedades').show();
            $newsletter.focus();
            return; // Detener ejecución y no guardar
        }
    }

    button.prop('disabled', true).text('Enviando');
    limpiaArticulos();

    $.ajax({
        data: $form.serialize(),
        url: '/ventas/save',
        type: 'post',
        success: function (response) {
            if (response.status === 'success') {
                if (id == 0) {
                    location.reload();
                    return;
                }

                const $venta = $('#venta' + id);

                // --- Actualización del DOM (igual que antes) ---
                $venta.find('.fecha').html(convertDate($('#fecha').val()));

                let nombreCliente = $form.find('.input-cliente').val() || 'Sin cliente asociado';
                const idCliente = $form.find('.input-id-cliente').val();
                if (idCliente) {
                    nombreCliente = `<a target="_blank" href="/clientes/view/${idCliente}">${nombreCliente}</a>`;
                }
                if ($('.check-regalo').is(':checked')) {
                    nombreCliente += ' <i class="fas fa-gift"></i>';
                }
                $venta.find('.nombre').html(nombreCliente);

                const asignado = $("#idAsignado option:selected").text();
                $venta.find('.assigned').html(asignado !== 'Sin Asignar' ? `[${asignado}]` : '');

                $venta.find('.info-destacada strong').html($form.find('.input-info-destacada').val());

                const psIdVal = $('#ps-id').val();
                $venta.find('.ps-id').html(psIdVal).data('ps-id', psIdVal);

                if ($('#idTipoVenta').val() == 1) {
                    const $boleta = $venta.find('.boleta');
                    $boleta.html('#' + $('#boleta').val()).removeClass('badge-primary');

                    if ($('#boleta-lista').is(':checked')) {
                        $boleta.removeClass('badge-warning badge-danger').addClass('badge-success');
                        $venta.find('.send-invoice').empty();
                    } else {
                        $boleta.addClass('badge-warning').removeClass('badge-success');
                        if ($('#id-tipo-documento').val() == 5 &&
                            $('#boleta').val() > 0 &&
                            $form.find('.input-email').val() !== '' &&
                            $form.find('.input-link-boleta').val() !== '') {
                            $venta.find('.send-invoice').html('<i class="fas fa-envelope"></i>');
                        }
                    }

                    const $transportista = $venta.find('.transportista');
                    const tVal = $("#idTransportista").val();
                    $transportista
                        .html($("#idTransportista option:selected").text())
                        .css({
                            borderColor: transportistas[tVal]['color'],
                            color: transportistas[tVal]['color']
                        });

                    const $estado = $venta.find('.estado-venta');
                    const estadoVal = $("#idEstadoVenta").val();
                    $estado.find('.estado-actual').html($("#idEstadoVenta option:selected").text());
                    $estado.css({
                        backgroundColor: estados[estadoVal]['fondo'],
                        color: estados[estadoVal]['color']
                    });
                    $venta.find('.send-form').toggle(estadoVal == 5);
                } else {
                    const tipoDoc = $('#id-tipo-documento').val();
                    const $boleta = $venta.find('.boleta');
                    $boleta
                        .html(tipoDoc == 2 ? 'Factura' :
                              tipoDoc == 3 ? 'Nota de Crédito' :
                              tipoDoc == 4 ? 'Merma' : '')
                        .addClass('badge-primary')
                        .removeClass('badge-success');
                }

                let detalle = [];
                $('.articulo-venta').each(function () {
                    const $this = $(this);
                    const cantidad = parseInt($this.find('.input-cantidad').val(), 10);
                    if (cantidad > 0) {
                        const idProducto = $this.find('.input-id-producto').val();
                        const nombreProd = $this.find('.input-producto').val();
                        const badge = cantidad > 1
                            ? `<span class="badge badge-pill badge-primary">${cantidad}</span>`
                            : `<span class="badge badge-pill" style="color:#0d6efd; border:1px solid #0d6efd; background-color:transparent;">1</span>`;
                        detalle.push(`<a href="/productos/detalle/${idProducto}" target="_blank">${badge} ${nombreProd}</a>`);
                    }
                });
                $venta.find('.detalle-productos .detalle').html(detalle.join('<br>'));

                const deuda = $('#adeudado').val() > 0 ? `<span class="text-danger">${clp($('#adeudado').val())}</span> | ` : '';
                $venta.find('.total').html(deuda + clp($('#total').val()));

                $('#modalVenta').modal('hide');
            } else {
                $alert.html(response.message).show();
                button.prop('disabled', false).text(id == 0 ? 'Crear' : 'Editar');
            }
        },
        error: function () {
            $alert.html('Error de servidor').show();
            button.prop('disabled', false).text(id == 0 ? 'Crear' : 'Editar');
        }
    });
});

	/*
	$("#editarVenta" ).click(function() {
		let button = $(this);
		$('.alert-venta').html('').hide();
		button.attr('disabled', 'disabled');
		button.html('Enviando');
		limpiaArticulos();
		let parametros = $('#formVenta').serialize();
		let id = $('#idVenta').val();

		// --- VALIDACIÓN NEWSLETTER SOLO SI NO ESTÁ DISABLED ---
		const $newsletter = $form.find('select.select-newsletter');
		if (!$newsletter.prop('disabled')) {
			const newsletterVal = $newsletter.val();
			if (!newsletterVal || newsletterVal === "-1") {
				$alert.html('Debes seleccionar si el cliente desea recibir ofertas y novedades').show();
				$newsletter.focus();
				return; // Detener ejecución y no guardar
			}
		}

		$.ajax({
			data:  parametros,
			url:   '/ventas/save',
			type:  'post',
			success:  function (response) {
				if (response.status == 'success') {
					if (id == 0) {
						location.reload(); //recargar es muy lento
					}
					else {
						//Actualiza visualizacion de venta en lista
						let venta = $('#venta' + id);
						venta.find('.fecha').html(convertDate($('#fecha').val()));
						let nombre_cliente = 'Sin cliente asociado';
						if ($('#formVenta .input-cliente').val() != '') {
							nombre_cliente = $('#formVenta .input-cliente').val();
						}
						if($('#formVenta .input-id-cliente').val() != ''){
							let id_cliente = $('#formVenta .input-id-cliente').val();
							nombre_cliente = '<a target="_blank" href="/clientes/view/' + id_cliente + '">' + nombre_cliente + '</a>';
						}
						if($('.check-regalo').is(':checked')) {
							nombre_cliente += ' <i class="fas fa-gift"></i>';
						}
						venta.find('.nombre').html(nombre_cliente);
						
						venta.find('.assigned').html('');
						let asignado = $("#idAsignado option:selected").html()
						if (asignado != 'Sin Asignar') {
							venta.find('.assigned').html('[' + asignado + ']');
						}

						venta.find('.info-destacada strong').html($('#formVenta .input-info-destacada').val());

						let ps_id = venta.find('.ps-id');
						ps_id.html($('#ps-id').val());
						ps_id.data('ps-id', $('#ps-id').val());

						//Ventas
						if ($('#idTipoVenta').val() == 1) {
							let boleta = venta.find('.boleta');
							boleta.html('#' + $('#boleta').val());
							boleta.removeClass('badge-primary');
							if($('#boleta-lista').is(':checked')) {
								boleta.removeClass('badge-warning');
								boleta.removeClass('badge-danger');
								boleta.addClass('badge-success');
								venta.find('.send-invoice').html('');
							}
							else {
								boleta.addClass('badge-warning');
								boleta.removeClass('badge-success');
								// id_tipo_venta = 5, numero de boleta > 0, email != '', y link_boleta != '' se activa el correo
								if ($('#id-tipo-documento').val() == 5 && $('#boleta').val() > 0 && $('#formVenta .input-email').val() != '' && $('#formVenta .input-link-boleta').val() != '') {
									venta.find('.send-invoice').html('<i class="fas fa-envelope"></i>');
								}

							}

							let transportista = venta.find('.transportista');
							transportista.html($("#idTransportista option:selected").html());
							transportista.css('border-color', transportistas[$("#idTransportista").val()]['color']);
							transportista.css('color', transportistas[$("#idTransportista").val()]['color']);

							let estado_venta = venta.find('.estado-venta');
							estado_venta.find('.estado-actual').html($("#idEstadoVenta option:selected").html());
							estado_venta.css('background-color', estados[$("#idEstadoVenta").val()]['fondo']);
							estado_venta.css('color', estados[$("#idEstadoVenta").val()]['color']);
							if ($("#idEstadoVenta").val() == 5) {
								venta.find('.send-form').show();
							}
							else{
								venta.find('.send-form').hide();
							}
						}
						//Facturas y NC
						else {
							if ($('#id-tipo-documento').val() == 2) {
								venta.find('.boleta').html('Factura');
							}
							else if ($('#id-tipo-documento').val() == 3) {
								venta.find('.boleta').html('Nota de Crédito');
							}
							else if ($('#id-tipo-documento').val() == 4) {
								venta.find('.boleta').html('Merma');
							}
							venta.find('.boleta').addClass('badge-primary');
							venta.find('.boleta').removeClass('badge-success');
						}

						// Detalle del pedido
						let detalle = '';
						let coma = '';
						$('.articulo-venta').each(function() {
							if ($(this).find('.input-cantidad').val() != '0') {
								var link = '<a href="/productos/detalle/'+$(this).find('.input-id-producto').val()+'" target="_blank">';
								let cantidad = $(this).find('.input-cantidad').val();
								if (cantidad > 1) {
									cantidad = '<span class="badge badge-pill badge-primary">' + cantidad + '</span>'
								}
								else {
									//cantidad = cantidad;
									cantidad = '<span class="badge badge-pill" style="color:#0d6efd; border:1px solid #0d6efd; background-color:transparent;">1</span>';
								}

								detalle += coma + link + cantidad + ' ' + $(this).find('.input-producto').val() + '</a>';
								coma = '<br>';
							}
						});
						venta.find('.detalle-productos .detalle').html(detalle);

						let deuda = '';
						if($('#adeudado').val() > 0) {
							deuda = '<span class="text-danger">' + clp($('#adeudado').val()) + '</span> | ';
						}
						venta.find('.total').html(deuda + clp($('#total').val()));
						$('#modalVenta').modal('hide');
					}
				}
				else {
					$('.alert-venta').html(response.message).show();
					button.removeAttr('disabled');
					button.html('Editar');
					if (id == 0) {
						button.html('Crear');
					}
				}
			},
			error: function() {
				$('.alert-venta').html('Error de servidor').show();
				button.removeAttr('disabled');
				button.html('Editar');
				if (id == 0) {
					button.html('Crear');
				}
			}
		});
	});
	*/

	// Elimina Venta y quita del listado
	$("#eliminarVenta" ).click(function() {
		if (confirm('Eliminar')) {
			let id = $('#formVenta #idVenta').val();
			let parametros = {
				id : id
			};
			$.ajax({
				data:  parametros,
				url:   '/ventas/delete',
				type:  'post',
				beforeSend: function () {
				
				},
				success:  function (response) {
					if (response.status == 'success') {
						$('#venta' + id).remove();
						$('#modalVenta').modal('hide');
					}
					else {
						$('.alert-venta').html(response.message).show();
						button.removeAttr('disabled');
						button.html('Editar');
						if (id == 0) {
							button.html('Crear');
						}
					}
				}
			});
		}
	});

});

function buscaCliente(email) {
	let parametros = {
		email : email
	};
	$.ajax({
		data:  parametros,
		url:   '/clientes/search_by_email',
		type:  'post',
		beforeSend: function () {
		},
		success:  function (response) {
			if (response != undefined) {
				console.log('no indefinido');
				$('.input-id-cliente').val(response.id);
				$('.input-cliente').val(response.nombre);
				$('.input-ps-id-cliente').val(response.ps_id);
				$('.input-email').removeClass('not-found').addClass('found');
				// Si se encontró cliente se esconde todo lo de crear cliente
				$('.check-crea-cliente').prop('checked', false);
				$('.check-crea-cliente').change();
				$('.div-crea-cliente').hide();
			}
			else {
				$('.input-ps-id-cliente').val('');
				$(this).addClass('not-found').removeClass('found');
			}

			let form = $('.form-venta');
			totalPuntos(form);
			revisaPuntos(form);
			totalVenta(form);
		}
	});
}

function totalProducto(articulo) {
	let cantidad = articulo.find('.input-cantidad').val();
	let precio_normal = articulo.find('.input-precio-normal').val();
	let descuento = articulo.find('.input-descuento-producto').val();
	let precio = precio_normal - descuento;
	articulo.find('.input-precio').val(precio);
	let total = cantidad * precio;
	articulo.find('.input-total-producto').val(total);
	let form = articulo.closest('.form-venta');
	totalVenta(form);
}

function totalVenta(form) {
	let totalFinal = 0;
	let totalAnterior = Number(form.find('.input-total').val());
	let pagado = Number(form.find('.input-pagado').val());
	let totalProductos = 0;
	form.find(".input-total-producto").each(function() {
		totalProductos += Number($(this).val());
	});
	//console.log('Total Productos:' + totalProductos);
	let descuento = Number(form.find('.input-descuento').val());
	//console.log('Dcto:' + descuento);
	let puntos = 0;
	if ($('.check-utiliza-puntos').is(':checked')) {

		// Venta editada
		if (form.find('.input-id').val() > 0) {

			puntos = Number(form.find('.input-descuento-puntos').val());
		}
		else {

			let puntosTexto = $('.puntos-disponibles b').html() || '0';

			puntos = Number(puntosTexto.replace('.', ''));
		}
	}
	//console.log('Puntos: ' + puntos);
	let puntosSobrantes = 0;

	if ((descuento + puntos) <= totalProductos) {
		totalFinal = totalProductos - descuento - puntos;
		//console.log('Total Final:' + totalFinal);
		form.find('.input-descuento-puntos').val(puntos);
	}
	else {
		totalFinal = 0;
		if (puntos > 0 && descuento < totalProductos) {
			puntosSobrantes = descuento + puntos - totalProductos
			descuentoPuntos = puntos - puntosSobrantes;
			form.find('.input-descuento-puntos').val(descuentoPuntos);
			//console.log('Descuento Puntos:' + descuentoPuntos);
		}
	}

	form.find('.input-total').val(totalFinal);
	if (totalAnterior == pagado) {
		form.find('.input-pagado').val(totalFinal);
	}
	else {
		totalDeuda(form);
	}
	totalPuntos(form);
}

function totalPuntos(form){
	// Solo si venta es presencial y nueva cumulará puntos
	if (form.find('.input-acumular-puntos').val() == 1) {
		// Solo acumula puntos si cliente existe en PS
		if (form.find('.input-ps-id-cliente').val() > 0 || form.find('.check-crea-cliente').is(':checked')) {
			// Calcular puntos entregado por cada producto
			let totalProductosSD = 0;
			let descuento = $('.input-descuento').val();
			let descuentoPuntos = $('.input-descuento-puntos').val();
			let totalVenta = $('.input-total').val();
			let totalPuntos = 0;
			
			form.find(".articulo-venta").each(function() {
				// Solo acumulan puntos productos sin descuento
				if ($(this).find('.input-descuento-producto').val() == 0) {
					totalProductosSD += Number($(this).find('.input-total-producto').val());
				}
			});
			
			// Si Cliente no paga, nunca acumulará puntos
			if (totalVenta > 0) {
				// Acumulará puntos según el menor monto entre Total Pagado y Total Productos Sin Desc.
				if (totalVenta > totalProductosSD) {
					totalPuntos = Math.floor((totalProductosSD) / 20);
				}
				else {
					totalPuntos = Math.floor((totalVenta) / 20);
				}
			}

			form.find('.input-puntos').val(totalPuntos);
			let mensaje = 'Cliente acumulará <b>' + clp(totalPuntos.toString()) + '</b> puntos.';
			

			let puntosCliente = 0;
			let puntosSobrantes = 0;
			if ($('.check-utiliza-puntos').is(':checked')) {
				puntosCliente = $('.puntos-disponibles b').html().replace('.', '');
				if (puntosCliente > descuentoPuntos) {
					puntosSobrantes = puntosCliente - descuentoPuntos;
					mensaje += '<br>Cliente quedará con <b>' + clp(puntosSobrantes.toString()) + '</b> puntos.';
				}
			}
			
			$('.puntos-texto').html(mensaje);
		}
		else {
			form.find('.input-puntos').val(0);
			$('.puntos-texto').html('Cliente no acumulará puntos.');
		}
	}
}

function revisaPuntos(form) {
	// Limpia descuento de cliente anterior
	form.find('.input-descuento-puntos').val('');

	// Solo si venta es presencial y nueva buscará puntos
	if (form.find('.input-acumular-puntos').val() == 1) {
		// Solo buscará puntos si cliente existe en PS
		if (form.find('.input-ps-id-cliente').val() > 0) {
			// ajax consultando total de puntos a clientes/get_total_points
			let ps_id_cliente = form.find('.input-ps-id-cliente').val();
			let parametros = {
				ps_id : ps_id_cliente
			};
			$.ajax({
				data:  parametros,
				url:   '/clientes/get_total_points',
				type:  'post',
				beforeSend: function () {
				},
				success:  function (response) {
					if (response.puntos_disponibles > 0) {
						$('.puntos-disponibles').html('Cliente tiene <b>' + clp(response.puntos_disponibles.toString()) + '</b> puntos DeMente disponibles.');
						$('.div-check-puntos').show();
					}
					else {

						$('.puntos-disponibles').html('Cliente aún no tiene puntos DeMente disponibles.');
						$('.div-check-puntos').hide();
					}
				}
			});
		}
		else {
			$('.puntos-disponibles').html('Cliente no cuenta con registro para acumular puntos.');
			$('.div-check-puntos').hide();

			//Si Cliente no tiene registro, muestra check para crear una cuenta en PS
			$('.div-crea-cliente').show();
			// Si dio el mail seguramente quiere crear por ende se marca el check automaticamente
			$('.check-crea-cliente').prop('checked', true);
			$('.check-crea-cliente').change();

		}
		$('.row-puntos-disponibles').show();
	}
}

function totalDeuda(form) {
	let deuda = 0;
	let total = Number(form.find('.input-total').val());
	let pagado = Number(form.find('.input-pagado').val());
	deuda = total - pagado;
	form.find('.input-adeudado').val(deuda);
	if (deuda > 0) {
		form.find('.row.deuda').show();
	}
	else {
		form.find('.row.deuda').hide();
	}
}

function limpiaModal(modal) {


	$('#headerVenta div').show();
	$('.hide-online').hide();
	$('.row-puntos-disponibles').hide();
	$('.datos-despacho').show();

	$('.select-newsletter').val("-1").attr('disabled', 'disabled');

	modal.find('.alert-venta').html('').hide();
	modal.find('.lista-productos').html('');

	// inputs
	modal.find('input[type="text"]').val('');
	modal.find('input[type="hidden"]').val('');
	modal.find('input[type="number"]').val(0);
	modal.find('input[type="date"]').val('');
	modal.find('input[type="datetime-local"]').val('');
	modal.find('input[type="checkbox"]').prop('checked', false);
	modal.find('textarea').val('');
	modal.find('select').val(function() {
		return $(this).find('option:first').val();
	});

	// Otros por defecto
	modal.find('.select-id-tipo-venta').val(1);
	modal.find('.select-id-tipo-documento').val(5);
	modal.find('.ps-transportista').html('Transportista');
	modal.find('.view-checklist').attr('href', '');
	modal.find('.view-checklist').hide();
	modal.find('.view-detail').attr('href', '').hide();
	modal.find('.view-detail-80').attr('href', '').hide();
	modal.find('.view-log').attr('href', '');
	modal.find('.view-log').hide();
	modal.find('.input-numero-operacion').parent().hide();
	modal.find('.row.deuda').hide();
	modal.find('.puntos-texto').html('');
	modal.find('.puntos-disponibles').html('');
	modal.find('.div-check-puntos').hide();
	modal.find('.select-id-comuna').html('');
	modal.find('.check-descuenta-stock').prop('checked', false);

	actualizaMedioPago();
}

 // Carga datos de venta en modal
function cargaDatos(modal, response) {
	venta = JSON.parse(response);
	modal.find('.input-id').val(venta.id);
	modal.find('.input-id-cliente').val(venta.id_cliente);
	modal.find('.input-cliente').val(venta.cliente);
	modal.find('.input-email').val(venta.email);
	modal.find('.input-cliente').addClass('found').removeClass('not-found');
	modal.find('.input-fecha').val(venta.fecha);
	modal.find('.input-fecha-venta').val(venta.fecha_venta);
	modal.find('.input-ps-id').val(venta.ps_id);
	modal.find('.input-ps-id-asociado').val(venta.ps_id_asociado);
	modal.find('.select-id-tipo-venta').val(venta.id_tipo_venta);
	modal.find('.select-id-tipo-documento').val(venta.id_tipo_documento);
	modal.find('.input-boleta').val(venta.boleta);
	modal.find('.input-fecha-boleta').val(venta.fecha_boleta);
	modal.find('.input-link-boleta').val(venta.link_boleta);
	modal.find('.input-descuento').val(venta.descuento);
	modal.find('.input-total').val(venta.total);
	modal.find('.input-pagado').val(venta.pagado);
	modal.find('.input-fecha-envio').val(venta.fecha_envio);
	modal.find('.input-info-destacada').val(venta.info_destacada);
	modal.find('.text-despacho').val(venta.despacho);
	modal.find('.text-observaciones').val(venta.observaciones);
	modal.find('.view-checklist').attr('href', '/ventas/checklist/' + venta.id);
	modal.find('.view-checklist').show();
	modal.find('.view-detail').attr('href', '/ventas/detalle/' + venta.id).show();
	modal.find('.view-detail-80').attr('href', '/ventas/detalle80/' + venta.id).show();
	modal.find('.view-log').attr('href', '/ventas/log/' + venta.id);
	modal.find('.view-log').show();
	modal.find('.select-id-canal').val(venta.id_canal);
	modal.find('.select-id-medio-pago').val(venta.id_medio_pago);

	modal.find('.input-dir-nombre').val(venta.dir_nombre);
	modal.find('.input-dir-apellidos').val(venta.dir_apellidos);
	modal.find('.input-rut').val(venta.rut);
	modal.find('.input-telefono').val(venta.telefono);
	modal.find('.input-direccion').val(venta.direccion);
	modal.find('.select-id-region').val(venta.id_region);
	actualizaComunas(venta.id_region, venta.id_comuna);
	modal.find('.input-despacho').val(venta.despacho);

	if(venta.id_estado_venta > 0) {
		modal.find('.select-estado-venta').val(venta.id_estado_venta);
	}
	if(venta.id_transportista > 0) {
		modal.find('.select-id-transportista').val(venta.id_transportista);
	}
	// mermas
	if (venta.id_tipo_venta == 4) {
		tipoDocumento(4);
	}
	if(venta.id_asignado > 0) {
		modal.find('.select-id-asignado').val(venta.id_asignado);
	}

	if (venta.adeudado > 0) {
		modal.find('.input-adeudado').val(venta.adeudado);
		modal.find('.row.deuda').show();
	}

	if (venta.boleta_lista == 1) {
		modal.find('.check-boleta-lista').prop('checked', true);
	}
	if (venta.despacho_pagado == 1) {
		modal.find('.check-despacho-pagado').prop('checked', true);
	}
	if (venta.regalo == 1) {
		modal.find('.check-regalo').prop('checked', true);
	}

	
	// Muestra puntos ganados por la venta
	modal.find('.puntos-texto').html('Cliente acumuló <b>' + venta.puntos + '</b> puntos');

	// Muestra si utilizó puntos en la venta
	if (venta.descuento_puntos > 0) {
		modal.find('.input-descuento-puntos').val(venta.descuento_puntos);
		modal.find('.check-utiliza-puntos').prop('checked', true);
		modal.find('.row-puntos-disponibles').show();
	}

	if (typeof venta.productos_ventas != "undefined") {
		for (let producto of venta.productos_ventas) {
			let html = $($.parseHTML($('.copy').html()));
			html.find('.input-cantidad').val(producto.cantidad);
			html.find('.input-id-producto').val(producto.id_producto);
			html.find('.input-id-producto-venta').val(producto.id);

			html.find('.input-producto').val(producto.nombre+' ['+proveedores[producto.id_proveedor]+']');
			html.find('.input-precio-normal').val(producto.precio_normal);
			html.find('.input-descuento-producto').val(producto.descuento);
			html.find('.input-precio').val(producto.precio_unitario);
			html.find('.input-total-producto').val(producto.precio_total);

			actualizaStock(html);

			let imagen = html.find('.imagen-producto');
			imagen.attr('src', 'https://dementegames.cl/'+producto.id_image+'-medium_default/img.jpg');
			imagen.attr('title', '<img src=\'https://dementegames.cl/'+producto.id_image+'-medium_default/img.jpg\'>')
			imagen.tooltip({
				animated: 'fade',
				placement: 'right',
				html: true
			});
			imagen.addClass('has-tooltip');

			modal.find('.lista-productos').append(html);
		}
		$('.lista-productos').find('.input-producto.new').each(function() {
			autocompleteProducto($(this));
			$(this).removeClass('new');
		});
	}

	$('.modal-wait').show();
}

function cargaPs(ps_id){
	let parametros = {
		id : ps_id
	};
	$.ajax({
		data:  parametros,
		url:   '/ventas/ps_get',
		type:  'post',
		beforeSend: function () {
		},
		success:  function (response) {
			venta = JSON.parse(response);
			//console.log(venta);
			modal = $('#modalVenta');

			//Limpia:
			modal.find('.check-despacho-pagado').prop('checked', false);

			//rellenar campos de venta
			modal.find('.input-ps-id-cliente').val(venta.id_customer);
			if (venta.cliente != null) {
				modal.find('.input-id-cliente').val(venta.cliente.id);
				modal.find('.input-cliente').val(venta.cliente.nombre);
			}
			modal.find('.input-email').val(venta.email);
			modal.find('.input-descuento').val(venta.total_discounts);
			modal.find('.input-total').val(venta.total_products);
			modal.find('.input-pagado').val(venta.total_paid);
			modal.find('.input-fecha').val(venta.date_add);
			modal.find('.input-fecha-venta').val(venta.date_add);
			modal.find('.ps-transportista').html('Transportista: ' + venta.carrier);
			modal.find('.select-estado-venta').val(venta.current_state);
			modal.find('.select-id-medio-pago').val(venta.id_medio_pago);
			modal.find('.select-id-canal').val(1);

			// Para medio de pago webpay se marca boleta como enviada
			if (venta.id_medio_pago == 1) {
				modal.find('.select-id-tipo-documento').val(8);
				modal.find('.input-boleta').val(venta.id_cart);
				modal.find('.input-fecha-boleta').val(venta.date_add.split("T")[0]);
				modal.find('.check-boleta-lista').prop('checked', true);
			}

			if (venta.total_shipping > 0) {
				modal.find('.check-despacho-pagado').prop('checked', true);

				// Agrega producto envío
				let envio = {
					id: "280",
					id_image: "0",
					name: "Envío",
					price: venta.total_shipping,
					product_id: "0",
					quantity: "1",
					total: venta.total_shipping
				};

				venta.products.push(envio);
			}
			//console.log(venta.products);
			//rellena dirección
			modal.find('.input-dir-nombre').val(venta.dir_firstname);
			modal.find('.input-dir-apellidos').val(venta.dir_lastname);
			modal.find('.input-rut').val(venta.rut);
			modal.find('.input-telefono').val(venta.phone);
			modal.find('.input-direccion').val(venta.address1);
			modal.find('.select-id-region').val(venta.id_country);
			actualizaComunas(venta.id_country, venta.id_state);

			//foreach mensaje
			if (typeof venta.messages != "undefined") {
				let despacho = '';
				for (let mensaje of venta.messages) {
					if (mensaje != null) {
						despacho += '. ' + mensaje;
					}
				}
				modal.find('.input-despacho').val(despacho);
			}
			
			
			/*
			let despacho = venta.receiver;
			if (venta.dni != '') {
				despacho += '\nRUT: ' + venta.dni;
			}
			despacho += '\n' + venta.address1;
			if (venta.state_name != null) {
				despacho += '\n' + venta.state_name;
			}
			else if (typeof venta.address2 != null) {
				despacho += '\n' + venta.address2;
			}

			if (venta.city != '') {
				despacho += '\n' + venta.city;
			}
			despacho += '\n' + venta.phone;

			//foreach mensaje
			if (typeof venta.messages != "undefined") {
				for (let mensaje of venta.messages) {
					if (mensaje != null) {
						despacho += '\n' + mensaje;
					}
				}
			}
			modal.find('.text-despacho').val(despacho);
			*/

			if (venta.gift == "1") {
				modal.find('.check-regalo').prop('checked', true);
				let observaciones = 'Envolver como regalo' + '\n' + 'Nota de regalo: ' + venta.gift_message;
				modal.find('.text-observaciones').val(observaciones);
			}

			//Eliminar todos los productos actuales
			modal.find('.lista-productos').html('');

			//foreach producto
			if (typeof venta.products != "undefined") {
				for (let producto of venta.products) {
					if (producto.id != null) {
						let html = $($.parseHTML($('.copy').html()));
						html.find('.input-cantidad').val(producto.quantity);
						html.find('.input-id-producto').val(producto.id);
						html.find('.input-producto').val(producto.name);
						html.find('.input-precio-normal').val(producto.price);
						html.find('.input-descuento-producto').val(0);
						html.find('.input-precio').val(producto.price);
						html.find('.input-total-producto').val(producto.total);

						actualizaStock(html);

						let imagen = html.find('.imagen-producto');
						imagen.attr('src', 'https://dementegames.cl/'+producto.id_image+'-medium_default/img.jpg');
						imagen.attr('title', '<img src=\'https://dementegames.cl/'+producto.id_image+'-medium_default/img.jpg\'>')
						imagen.tooltip({
							animated: 'fade',
							placement: 'right',
							html: true
						});
						imagen.addClass('has-tooltip');

						modal.find('.lista-productos').append(html);
					}
					else {
						alert('El producto ' + producto.name + ' no está asociado en el sistema. Por favor asociar antes de importar la venta.');
					}
				}
				$('.lista-productos').find('.input-producto.new').each(function() {
					autocompleteProducto($(this));
					$(this).removeClass('new');
				});
			}

			totalVenta(modal.find('.form-venta'));
		}
	});
}
/*
function cargaImagen(articulo){
	let id = articulo.find('.input-id-producto').val();
	let parametros = {
		id : id
	};
	$.ajax({
		data:  parametros,
		url:   '/productos/get_ps_image',
		type:  'post',
		beforeSend: function () {
		},
		success:  function (response) {
			let res = JSON.parse(response);
			let imagen = articulo.find('.imagen-producto');
			imagen.attr('src', 'https://dementegames.cl/'+res.id_image+'-medium_default/img.jpg');
			imagen.attr('title', '<img src=\'https://dementegames.cl/'+res.id_image+'-medium_default/img.jpg\'>')
			if (!imagen.hasClass('has-tooltip')) {
				imagen.tooltip({
					animated: 'fade',
					placement: 'right',
					html: true
				});
			}
			else{
				imagen.attr('data-original-title', '<img src=\'https://dementegames.cl/'+res.id_image+'-medium_default/img.jpg\'>')
			}
			imagen.addClass('has-tooltip');
		}
	});
}
*/
function cambiaEstado(id_venta, id_estado, estado){
	let parametros = {
		id: id_venta,
		id_estado: id_estado
	};
	$.ajax({
		data:  parametros,
		url:   '/ventas/cambia_estado',
		type:  'post',
		success:  function (response) {
			let res = JSON.parse(response);
			if (typeof res.data != "undefined") {
				let venta;
				let estado_venta;
				for (let v of res.data) {
					venta = $('#venta'+v.id_venta);
					estado_venta = venta.find('.estado-venta');
					estado_venta.find('.estado-actual').html(estado);
					estado_venta.css('background-color', estados[id_estado]['fondo']);
					estado_venta.css('color', estados[id_estado]['color']);
					if (id_estado == 5) {
						venta.find('.send-form').show();
					}
					else {
						venta.find('.send-form').hide();
					}
				}
			}
		},
		error: function (response) {
		}
	});
}

function tipoDocumento(idTipo){
	$('.descuenta-almacenes-group').hide();
	$('.input-boleta').parent().show();
	$('.input-fecha-boleta').parent().show();
	$('.input-link-boleta').parent().hide();
	$('.check-boleta-lista').parent().show();
	$('.check-descuenta-almacenes').prop('checked', true);

	if (idTipo == 1) {
	
	}

	if (idTipo == 2) {
	
	}

	if (idTipo == 3) {
	
	}

	if (idTipo == 4) {
		$('.descuenta-almacenes-group').show();
		$('.input-boleta').parent().hide();
		$('.input-fecha-boleta').parent().hide();
		$('.input-link-boleta').parent().hide();
		$('.check-boleta-lista').parent().hide();
	}

	if (idTipo == 5) {
		$('.input-link-boleta').parent().show();
	}

	if (idTipo == 10) {
		$('.input-boleta').parent().hide();
		$('.input-fecha-boleta').parent().hide();
		$('.input-link-boleta').parent().hide();
		$('.check-boleta-lista').parent().hide();
	}

	if (idTipo == 12) {
	}

}

function actualizaComunas(id_region, id_comuna){
	let comunas_region = comunas[id_region];
	$('.select-id-comuna').html('<option value="">Seleccionar</option>');
	for (let cr in comunas_region) {
		let option = '<option value="' + cr +'">' + comunas_region[cr] + '</option>';
		$('.select-id-comuna').append(option);
	}
	if (typeof id_comuna != 'undefined') {
		$('.select-id-comuna').val(id_comuna);
	}
}

// Muestra icono para enviar encuesta
function mostrarEncuesta(id) {

}

function agregaProducto() {
	// Buscar si ya hay un input-producto vacío
	let inputVacio = $(".lista-productos .input-producto").filter(function() {
		return $(this).val().trim() === "";
	}).first();

	if (inputVacio.length > 0) {
		// Si existe un input vacío, hacemos focus ahí y no agregamos
		inputVacio.focus();
		return;
	}

	// Si no hay vacío, agregamos una nueva línea
	let html = $(".copy").html();
	$(".form-venta").find('.lista-productos').append(html);

	$('.lista-productos').find('.input-producto.new').each(function() {
		autocompleteProducto($(this));
		$(this).removeClass('new');
		$(this).focus();
	});
}

/**
 * Comportamiento deseado:
 * Al leer un código busca el id del producto
 * Si lo encuentra busca si el id ya se encuentra en la lista de productos
 * Si se encuentra agrega una unidad a ese producto
 * Si no lo encuentra setea el id en el producto actual
 * Inserta un nuevo producto y focusea el campo de nombre de producto
 */

function buscaCodigo(codigo, articulo, callback) {
	$.ajax({
		url: "productos/buscaCodigo",
		type: "POST",
		data: { codigo: codigo },
		dataType: "json",
		success: function(response) {
			if (response.success) {
				let data = response.data;
				let id_producto = data.id;

				let existente = 0;
				$('.lista-productos').find('.articulo-venta').each(function() {
					if ($(this).find('.input-id-producto').val() == id_producto && existente == 0) {
						// Encontró producto en la lista
						let cantidad = $(this).find('.input-cantidad').val();
						cantidad++;
						$(this).find('.input-cantidad').val(cantidad);
						totalProducto($(this));
						articulo.remove();
						callback('aumentado');
						existente++;
					}
				});

				if (existente == 0) {
					articulo.find('.input-producto').val(data.nombre);
					articulo.find('.input-id-producto').val(id_producto);
					callback('encontrado');
				}
			} else {
				callback('no encontrado');
			}
		},
		error: function() {
			callback('error');
		}
	});
}
/*
function buscaCodigo(codigo, articulo) {
	let result = 'no encontrado';
	if (codigos_barras[codigo] != undefined) {
		// Si lo encuentra deja id en ''
		articulo.find('.input-id-producto').val('');
		// Luego busca id en lista de productos
		id_producto = codigos_barras[codigo];

		let existente = 0;
		$('.lista-productos').find('.articulo-venta').each(function() {
			if ($(this).find('.input-id-producto').val() == id_producto && existente == 0) {
				// Encontró producto en la lista
				// Aumenta cantidad
				let cantidad = $(this).find('.input-cantidad').val();
				cantidad++;
				$(this).find('.input-cantidad').val(cantidad);
				totalProducto($(this));
				// Blanquea
				articulo.remove();
				agregaProducto();
				result = 'aumentado';
				existente++;
			}
		});

		if (existente == 0 && info_productos[id_producto] != undefined) {
			articulo.find('.input-producto').val(info_productos[id_producto]['nombre']);
			articulo.find('.input-id-producto').val(id_producto);
			// Si todo es valido genera una nueva fila de producto y se posiciona para leer otro codigo
			result = 'encontrado';
		}
	}
	return result;
}
*/


function limpiaArticulos() {
	$('.lista-productos').find('.articulo-venta').each(function() {
		if ($(this).find('.input-id-producto').val() == '' && $(this).find('.input-producto').val() == '') {
			$(this).remove();
		}
	});
}

function actualizaMedioPago() {
	var idCanal = $('.select-id-canal').val();
	var idVenta = $('.input-id').val();
	var selectMedioPago = $('#idMedioPago');

	selectMedioPago.find('option').hide(); // Oculta todas las opciones
	if ((idCanal == 2 || idCanal == 4 || idCanal == 7 || idCanal == 8 || idCanal == 12) && idVenta == 0) {
		selectMedioPago.find('option[value="0"], option[value="2"], option[value="3"], option[value="5"], option[value="8"], option[value="9"], option[value="10"]').show();
	} else {
		selectMedioPago.find('option').show();
	}
}

function actualizaStock(articulo) {
	let id_producto = articulo.find('.input-id-producto').val();
	let id_transportista = $('.select-id-transportista').val();

	if (id_producto == '' || id_transportista == '') {
		articulo.find('.span-cantidad-actual').html("<i title='Producto o transportista no definido'>n/a</i>");
		articulo.find('.span-disponibles-almacen').html("<i title='Producto o transportista no definido'>n/a</i>");
		return;
	}

	$.ajax({
		url: "productos/get_stock_producto", // tu endpoint en PHP
		type: "POST",
		data: {
			id_producto: id_producto,
			id_transportista: id_transportista
		},
		dataType: "json",
		success: function(response) {
			if (response.success) {
				let stockActual = response.data.stock_general;
				let stockAlmacen = response.data.stock_almacen;
				let stockAlmacenes = response.data.stocks_por_almacen;

				// Stock general
				articulo.find('.span-cantidad-actual').html(stockActual);
				if (stockActual < 1) {
					articulo.find('.product-warning').show().removeClass('hidden');
					articulo.find('.span-cantidad-actual').addClass('danger');
				} else {
					articulo.find('.product-warning').hide();
					articulo.find('.span-cantidad-actual').removeClass('danger');
				}

				// Stock en almacén asignado
				articulo.find('.span-disponibles-almacen').html(stockAlmacen);
				if (stockAlmacen < 1) {
					articulo.find('.product-warning-almacen').show().removeClass('hidden');
					articulo.find('.span-disponibles-almacen').addClass('danger');
				} else {
					articulo.find('.product-warning-almacen').hide();
					articulo.find('.span-disponibles-almacen').removeClass('danger');
				}

				// Tooltip con stocks por almacén
				let stocks = '<p class="text-left mb-0">'
					+ 'Bodega: ' + (stockAlmacenes[1] ?? 0)
					+ '<br />Italia 1601: ' + (stockAlmacenes[5] ?? 0)
					+ '<br />Los Dominicos: ' + (stockAlmacenes[8] ?? 0)
					+ '<br />Drugstore: ' + (stockAlmacenes[12] ?? 0)
					+ '</p>';

				let almacenes = articulo.find('.span-disponibles-almacenes');
				if (!almacenes.hasClass('has-tooltip')) {
					almacenes.attr('title', stocks).tooltip({
						animated: 'fade',
						placement: 'right',
						html: true
					});
				} else {
					almacenes.attr('data-original-title', stocks);
				}
				almacenes.addClass('has-tooltip');

			} else {
				articulo.find('.span-cantidad-actual').html("<i title='No encontrado en sistema'>n/a</i>");
				articulo.find('.span-disponibles-almacen').html("<i title='No encontrado en sistema'>n/a</i>");
			}
		},
		error: function() {
			articulo.find('.span-cantidad-actual').html("<i title='Error consultando stock'>n/a</i>");
			articulo.find('.span-disponibles-almacen').html("<i title='Error consultando stock'>n/a</i>");
		}
	});
}


function cargaInfoProducto(id_producto, articulo, input_producto) {
	$.ajax({
		url: "productos/get_basico",
		type: "POST",
		data: { id: id_producto },
		dataType: "json",
		success: function(response) {
			if (response.success) {
				//console.log('Entra en success');
				let data = response.data;
				let idCanal = $('.select-id-canal').val();
				input_producto.addClass('found').removeClass('not-found');

				articulo.find('.input-precio-normal').val(data.precio_normal);

				// Para tienda y feria carga precios y descuentos de tienda
				if ([2,4,7,8,12].includes(parseInt(idCanal))) {
					articulo.find('.input-descuento-producto').val(data.descuento_tienda);
					articulo.find('.input-precio').val(data.precio_tienda);
				} else {
					articulo.find('.input-descuento-producto').val(data.descuento);
					articulo.find('.input-precio').val(data.precio);
				}

				actualizaStock(articulo);

				if (articulo.find('.input-cantidad').val() == 0) {
					articulo.find('.input-cantidad').val(1);
				}

				let imagen = articulo.find('.imagen-producto');
				imagen.attr('src', 'https://dementegames.cl/'+data.id_image+'-medium_default/img.jpg');
				imagen.attr('title', '<img src=\'https://dementegames.cl/'+data.id_image+'-medium_default/img.jpg\'>')
				if (!imagen.hasClass('has-tooltip')) {
					imagen.tooltip({
						animated: 'fade',
						placement: 'right',
						html: true
					});
				}
				else{
					imagen.attr('data-original-title', '<img src=\'https://dementegames.cl/'+data.id_image+'-medium_default/img.jpg\'>')
				}
				imagen.addClass('has-tooltip');


				totalProducto(articulo);
				agregaProducto();
			} else {
				console.warn(response.message);
				articulo.find('.input-id-producto').val('');
				input_producto.val('No Encontrado');
				input_producto.addClass('not-found').removeClass('found');
			}
		},
		error: function() {
			console.error('Error en la petición AJAX');
			articulo.find('.input-id-producto').val('');
			input_producto.val('No Encontrado');
			input_producto.addClass('not-found').removeClass('found');
		}
	});
}