var statusPausa = false;
let mamadasPendejas = false;
// =================================================================
// Id del timeout que se ejecutara si el estado de pausa
// tenia un tiempo limite
let idTimeoutTiempoLimite = null;
// =================================================================
// Id del registro de pausa cuando se expira el tiempo
let idReportePausa = '';
// =================================================================
let limiteSeleccionPausa_intervalo = -1; 
// ? ^ Id del intervalo para el contador de tiempo de seleccion
let limiteSeleccionPausa_actual = 0;

function ocultapausa() {
	$('#codPausa').hide();
	statusCalificacion = false;
	$('#botonPausaCalificar').attr('disabled', true);
}

function pideRazonPausa(id) {
	if (statusPausa) {
		statusPausa = false;
		$.ajax({
			url: MODULOS + 'EstadosPausa/getStatusesSelect',
			type: 'POST',
			dataType: 'text',
			success: function (result) {
				var resp = JSON.parse(result);
				console.log(resp);
				if (resp.Estado == 'ok') {
					$('#codigosPausa').html('');
					if (resp.Registros.length > 0) {
						for (var i = 0; i < resp.Registros.length; i++) {
							if (id == resp.Registros[i].estado) {
								$('#codigosPausa').append(`
									<a 
										href="#" 
										style="padding: 5 px;" 
										class="letraSize col-sm-3  bg-success text-white text-center list-group-item list-group-item-secondary text-wrap" 
										onclick="enviaPausa(
											'${resp.Registros[i].estado}',1,${resp.Registros[i].tiempo_limite},'${resp.Registros[i].requiere_aprovacion}','${resp.Registros[i].cantidad}'
										)"
									>
										${resp.Registros[i].estado}-${resp.Registros[i].nombre}
									</a>`);
							} else {
								$('#codigosPausa').append(`
									<a 
										href="#" 
										style="padding: 5 px;" 
										class="letraSize col-sm-3  botonCalificar text-center list-group-item-action text-wrap" 
										onclick="enviaPausa('${resp.Registros[i].estado}',0,${resp.Registros[i].tiempo_limite},'${resp.Registros[i].requiere_aprovacion}','${resp.Registros[i].cantidad}')"
									>
										${resp.Registros[i].estado}-${resp.Registros[i].nombre}
									</a>
								`);
							}
						}
						if (!id) {
							document
								.getElementById('my_iframe')
								.contentWindow.PauseCodeSelectContent_create(
									'YES'
								);

							// TODO: Poner contador e iniciarlo
							if (TIEMPO_LIMITE_PAUSA > 0) {
								// ? Interfaz
								const contenedorTimer = document.getElementById("timer-seleccion-pausa")

								contenedorTimer.innerHTML = '';

								const labelTimer = document.createElement('span')
								labelTimer.textContent = i18n.gettext("Selecciona en");
								labelTimer.style.fontSize = '0.8rem';
								const mainTimer = document.createElement('span');
								mainTimer.textContent = '' + TIEMPO_LIMITE_PAUSA + '.0s';
								mainTimer.style.fontSize = '1.4rem';
								mainTimer.style.fontWeight = '700';
								mainTimer.style.transition = 'all 137ms ease-in-out';
								const hintTimer = document.createElement('span')
								hintTimer.textContent = i18n.gettext("Volverás a disponible automáticamente si no envías un código a tiempo");
								hintTimer.style.fontSize = '0.8rem';
								hintTimer.style.textAlign = 'center';
								hintTimer.className = 'text-danger'

								mainTimer.className = '';

								contenedorTimer.appendChild(labelTimer);
								contenedorTimer.appendChild(mainTimer);
								contenedorTimer.appendChild(hintTimer);

								limiteSeleccionPausa_actual = TIEMPO_LIMITE_PAUSA * 1000;
								limiteSeleccionPausa_intervalo = setInterval(() => {
									// Actualizar contador
									limiteSeleccionPausa_actual -= 100;
									texto_timer = String(limiteSeleccionPausa_actual).padStart(5, '0');
									texto_start = texto_timer.slice(0, 2);
									texto_end = texto_timer.slice(2, 3);
									texto = texto_start + '.' + texto_end + 's';
									mainTimer.textContent = texto;

									if (limiteSeleccionPausa_actual <= 5000 && mainTimer.className == '') {
										mainTimer.className = 'text-danger';
										mainTimer.style.animation = 'pulsating-text ease-in 1s infinite';
									}

									if (limiteSeleccionPausa_actual <= 0) {
										// ! Accion default: poner en disponible
										playAgente()
										ocultapausa()

										clearInterval(limiteSeleccionPausa_intervalo);
									}

								}, 100)
							}
						}
					} else {
						enviaPausa('PAUSA', 1, -1, '0');
					}
				} else {
					$('#ListaAlert').html(i18n.gettext(resp.Descripcion));
					crearTooltip();
				}
			},
			error: function (error) {
				console.log(error);
			},
		});
	}
}

function pausaAgente() {
	bloquearPlay = false;
	document
		.getElementById('my_iframe')
		.contentWindow.AutoDial_ReSume_PauSe(
			'VDADpause',
			'',
			'',
			'',
			'',
			'',
			'',
			'YES'
		);
	$('#codPausa').show();
	statusPausa = true;
	$('#botonPausaCalificar').attr('disabled', false);
	pideRazonPausa();
}
function truncaPausa() {
	Enpausa = false;
}
function enviaPausa(id, cant, tiempo_limite, requiere_aprovacion, cantidad, noCerrarModal) {
	/*
		El tiempo_limite determina en segundos cuando un agente a rebasado
		el tiempo limite en que puede estar en pausa. Si el tiempo_limite es
		< 0 la pausa no tendra tiempo limite.
		Si se requiere_aprovacion un supervisor y solo un supervisor
		puede desactivar la pausa, donde se generara un reporte de pausa.
	*/
	console.log(cantidad);
	if (cant == 0) {
		statusPausa = true;
		pideRazonPausa(id);
	} else {
		Enpausa = true;
		let tiempo_quepaso = 0;
		let pausa_contador = setInterval(HandleContador, 1000);
		function HandleContador() {
			let horas = Math.floor(tiempo_limite / 3600);
			let minutos = Math.floor((tiempo_limite % 3600) / 60);
			let segundos = tiempo_limite % 60;
			horas = String(horas).padStart(2, '0');
			minutos = String(minutos).padStart(2, '0');
			segundos = String(segundos).padStart(2, '0');

			$('#pause_time_left').text(
				'TIEMPO RESTANTE DE PAUSA: ' +
					horas +
					':' +
					minutos +
					':' +
					segundos
			);

			if (tiempo_limite > 0 || cantidad <= 0) {
				tiempo_limite--;
				tiempo_quepaso++;
			} else {
				Enpausa = false;
			}

			if (!Enpausa) {
				$('#pause_time_left').text('');
				$.ajax({
					url: 'EstadosPausa/resumePause',
					type: 'POST',
					data: {
						usuario: Usuario,
						campana: campanaActual,
						codigoPausa: id,
						tiempo: tiempo_quepaso,
					},
					dataType: 'text',
					success: function (response) {
						var res = JSON.parse(response);
						if (res.Estado == 'ok') {
							console.log('todo bien :)');
						} else {
							console.log('algo salio mal');
							console.log(res.Descripcion);
						}
					},
					error: function (res) {
						console.log(res);
					},
				});
				clearInterval(pausa_contador);
				tiempo_quepaso = 0;
			}
		}

		document
			.getElementById('my_iframe')
			.contentWindow.PauseCodeSelect_submit(id, 'YES');
		clearInterval(limiteSeleccionPausa_intervalo);

		console.log('nocerrarmodal', noCerrarModal)
		if (!noCerrarModal) {
			ocultapausa();
		}

		if (cantidad <= 0) {
			console.log('Tiempo limite de pausa superado');
			Enpausa = false;
			crearRegistroReportePausa(id).then((_) => {
				if (requiere_aprovacion === '1') {
					$('#modalTiempoLimitePausa').modal('show');
					localStorage.setItem('idReportePausa', idReportePausa);
				}
				idTimeoutTiempoLimite = null;
			});
		}
		if (tiempo_limite > 0) {
			idTimeoutTiempoLimite = setTimeout(() => {
				console.log('Tiempo limite de pausa superado');
				Enpausa = false;
				crearRegistroReportePausa(id).then((_) => {
					if (requiere_aprovacion === '1') {
						$('#modalTiempoLimitePausa').modal('show');
						localStorage.setItem('idReportePausa', idReportePausa);
					}
					idTimeoutTiempoLimite = null;
				});
			}, tiempo_limite * 1000);
		} else {
			idTimeoutTiempoLimite = null;
			Enpausa = false;
		}
	}
}

function nextDialMan() {
	const og_bloquearRedial = bloquearRedial
	const og_bln_dial_block = bln_dial_block;

	bloquearRedial = true;

	if (bln_dial_block) {
		bloquearRedial = og_bloquearRedial
		return;
	}

	bln_dial_block = true;
	if (!enLlamada) {
		if (!bloquearPlay || mamadasPendejas != 2) {
			$.get('/' + RUTA_MAESTRA + '/index.php/homeAgente/revisarHopperVacio')
				.then(function (d) {
					const data = JSON.parse(d)

					if (data.Estado === 'ok') {
						if (data.Data > 0) {
							clearTimeout(idTimeoutTiempoLimite);
							
							mamadasPendejas = 2;
							bloquearPlay = true;
							document
								.getElementById('my_iframe')
								.contentWindow.AutoDial_ReSume_PauSe(
									'VDADpause',
									'',
									'',
									'',
									'',
									'',
									'',
									'YES'
								);
							document
								.getElementById('my_iframe')
								.contentWindow.PauseCodeSelectContent_create('YES');
							document
								.getElementById('my_iframe')
								.contentWindow.PauseCodeSelect_submit('NEXT', 'YES');
							setTimeout(() => {
								if (!enLlamada) {
									document
										.getElementById('my_iframe')
										.contentWindow.ManualDialNext(
											'',
											'',
											'',
											'',
											'',
											'0',
											'',
											'',
											'YES'
										);
								}
							}, 2000);
							otraFlag = true;
						} else {
							bloquearRedial = og_bloquearRedial
							bln_dial_block = og_bln_dial_block
							alert(
								'No hay registros disponibles para marcar'
							);
						}
					} else {
						bloquearRedial = og_bloquearRedial
						bln_dial_block = og_bln_dial_block	
					}
				}).catch(err => {
					bloquearRedial = og_bloquearRedial
					bln_dial_block = og_bln_dial_block
				})
		} else {
			bloquearRedial = og_bloquearRedial
			bln_dial_block = og_bln_dial_block
			alert(
				'Acabas de presionar el boton de play, espera por la llamada'
			);
		}
	} else {
		bloquearRedial = og_bloquearRedial
		bln_dial_block = og_bln_dial_block
	}
}

function playAgente() {
	clearTimeout(idTimeoutTiempoLimite);
	bandera_pausa = false;
	if (!enLlamada) {
		if (!bloquearPlay || mamadasPendejas != 1) {
			Enpausa = false;
			bloquearPlay = true;
			mamadasPendejas = 1;
			if (Manual === 'MANUAL') {
				nextDialMan();
			} else {
				if (_FORZAR_PAUSA && !_FORZAR_PAUSA_SONANDO) {
					enviaPausa(_FORZAR_PAUSA_CODIGO, 1, -1, '0');
				} else {
					document
						.getElementById('my_iframe')
						.contentWindow.AutoDial_ReSume_PauSe(
							'VDADready',
							'',
							'',
							'',
							'',
							'',
							'',
							'YES'
						);
				}
				// Eliminar el timeout por que ya se quito la pausa
			}
		} else {
			alert(
				'Acabas de presionar el boton de play, espera por la llamada'
			);
		}
	}
}

function detenerAgente() {
	$('#btnPlay').addClass('disabled');
	$('#btnPause').addClass('disabled');
	$('#btnPause').addClass('d-none');
	$('#btnRecord').html('<i class="fas fa-dot-circle controles"></i>');
}

// Funcion para hacer peticiones
function $_post(url, data) {
	return $.post(MODULOS + url, data)
		.then((r) => {
			if (r.Estado === 'ok') {
				return r;
			} else {
				throw r;
			}
		})
		.catch((e) => {
			throw e;
		})
		.catch((e) => {
			console.error(e);
			if (!e.Descripcion) {
				throw {
					Descripcion: 'Error desconocido',
				};
			}
			throw e;
		});
}

// Funciona para hacer el registro de reporte del estado de pausa
function crearRegistroReportePausa(pauseCode) {
	return $_post('HomeAgente/createPauseReport', { pauseCode })
		.then((r) => {
			idReportePausa = r.idReport;
		})
		.catch((e) => {});
}

// Funcion para cuando se cierra el modal si se requiere aprovacion del
// del supervisor
function reanudarAgenteTimepoLimiteExcedido() {
	const data = {
		usuario: $('#usuarioSupervisorPausa').val(),
		password: $('#passwordSupervisorPausa').val(),
		idReport: idReportePausa,
	};
	return $_post('HomeAgente/checkSupervisor', data)
		.then(() => {
			$('#passwordSupervisorPausa').val('');
			$('#usuarioSupervisorPausa').val('');
		})
		.catch((e) => {
			$('#passwordSupervisorPausa').val('');
			$('#usuarioSupervisorPausa').val('');
			throw e;
		});
}

$('#iniciarSupervisor').click((e) => {
	const m_error = $('#mensajeErrorTiempoLimitePausa');
	reanudarAgenteTimepoLimiteExcedido()
		.then((_) => {
			$('#modalTiempoLimitePausa').modal('hide');
			m_error.text('');
			m_error.hide();
			localStorage.removeItem('idReportePausa');
		})
		.catch((e) => {
			m_error.text(e.Descripcion);
			m_error.show();
		});
});

// Mostrar modal si reinicio pantalla
if (localStorage.getItem('idReportePausa')) {
	idReportePausa = localStorage.getItem('idReportePausa');
	$('#modalTiempoLimitePausa').modal('show');
}
