function getColumns() {
	let columns = [
		{
			title: `N°`,
			data: `id`,
			className: 'text-center'
		},
		{
			title: `APELLIDOS Y NOMBRES`,
			data: null,
			render: (data) => {
				let nombresCompletos;
				let nombres = data.trabajador_nombres;
				let apellidos = data.trabajador_apellidos;
				nombresCompletos = `${apellidos} ${nombres}`;

				return nombresCompletos;
			}
		},
		{
			title: `TIPO`,
			data: `tiposeminario_descripcion`,
			className: 'text-center'
		},
		{
			title: `GRUPO ACAD.`.split(" ").join("<br>"),
			data: `grupoacademico_descripcion`,
			className: 'text-center'
		},
		{
			title: `FECHA`,
			data: `fecha_seminario`,
			className: 'text-center'
		},
		{
			title: `HORA INICIO`,
			data: `hora_inicio`,
			className: 'text-center'
		},
		{
			title: `HORA FIN`,
			data: `hora_fin`,
			className: 'text-center'
		},
		{
			title: `OBSERVACIÓN`,
			data: `observacion`,
			className: 'text-center'
		},
		{
			title: `ESTADO`,
			data: `estado`,
			className: 'text-center',
			render: (data) => {
				let label = "";
				let text = "";

				switch (data) {
					case - 1:
						label = "label label-danger";
						text = "ELIMINADO";
						break;
					case 0:
						label = "label bg-purple";
						text = "PENDIENTE";
						break;
					case 1:
						label = "label label-success";
						text = "ACEPTADO";
						break;
					case 2:
						label = "label label-danger";
						text = "RECHAZADO";
						break;
				}

				return `<span class="${label}">${text}</span>`;
			}
		},
		{
			title: `ACCIONES`,
			data: null,
			className: 'text-center',
			render: (data) => {
				let acciones = "";
				let verdetalle = "";
				let editar = "";
				let eliminar = "";
				let aceptar = "";
				let rechazar = "";

				if (data.estado === 1) {
					eliminar = `<span style="cursor: pointer"><i class="eliminar fa fa-power-off text-danger-700"></i>&nbsp;&nbsp;</span>`;
				} else {
					eliminar = `<span style="cursor: pointer"><i class="eliminar fa fa-power-off text-success-700"></i>&nbsp;&nbsp;</span>`;
				}

				aceptar = `<span style="cursor: pointer"><i class="aceptar icon-checkmark4 text-success-700"></i>&nbsp;&nbsp;</span>`;
				rechazar = `<span style="cursor: pointer"><i class="rechazar icon-cross2 text-danger-700"></i>&nbsp;&nbsp;</span>`;
//				verdetalle = `<span style="cursor: pointer"><i class="verdetalle icon-three-bars text-primary-700"></i>&nbsp;&nbsp;</span>`;
				editar = `<span style="cursor: pointer"><i class="editar icon-pencil text-slate-800"></i>&nbsp;&nbsp;</span>`;



				acciones = aceptar + rechazar + verdetalle + editar + eliminar;
				return acciones;
			}
		},
	];

	return columns;
}

const listarPersonal = (selectorName) => {
	initSelect2(selectorName, baseURLRest + URI_TRABAJADORES, {title: "nombresapellidos", subtitle: "documentoidentidad"});
};

const listarSedes = (selectorName) => {
	ajaxWebService.get(URI_SEDES).then((result) => {
		let sedes = result.data;
		sedes = _.orderBy(sedes, s => s.descripcion);
		let html = `<option value="">[TODOS]</option>`;
		sedes.forEach(sede => html += `<option value="${sede.codigo}">${sede.descripcion}</option>`);
		$(`${selectorName}`).html(html);
		$(selectorName).select2();
	});
};

const mostrarModalAprobarSeminario = (data) => {
	let {id, estado} = data;
	let titulo = "";
	let textoConfirmacion = ""
	let tituloOperacion = "";
//	if (estado == 0) {
	titulo = 'Está seguro de aprobar el seminario?';
	textoConfirmacion = 'Sí, aprobar!';
	tituloOperacion = '¡Aprobado exitosamente!';
	estado = 1;
//	}

	swal({
		title: titulo,
		text: "",
		type: 'warning',
		showCancelButton: true,
		confirmButtonColor: '#3085d6',
		cancelButtonColor: '#d33',
		confirmButtonText: textoConfirmacion
	}).then((result) => {
		if (result.value) {
			ajaxWebService.patch(`${URI_DOCENTES_PROGRAMACION_SEMINARIO}/${id}`, {estado}).then((response) => {
				if (response.status) {
					swal({
						type: 'success',
						title: tituloOperacion,
						showConfirmButton: false,
						timer: 1500
					});
					listarSeminariosProgramados();
				}
			});
		}
	});
};


const mostrarModalRechazarSeminario = (data) => {
	let {id, estado} = data;
	let titulo = "";
	let textoConfirmacion = ""
	let tituloOperacion = "";
//	if (estado == 0) {
	titulo = 'Está seguro de desaaprobar el seminario?';
	textoConfirmacion = 'Sí, desaprobar!';
	tituloOperacion = '¡Desaprobado exitosamente!';
	estado = 2;
//	}

	swal({
		title: titulo,
		text: "",
		type: 'warning',
		showCancelButton: true,
		confirmButtonColor: '#3085d6',
		cancelButtonColor: '#d33',
		confirmButtonText: textoConfirmacion
	}).then((result) => {
		if (result.value) {
			ajaxWebService.patch(`${URI_DOCENTES_PROGRAMACION_SEMINARIO}/${id}`, {estado}).then((response) => {
				if (response.status) {
					swal({
						type: 'success',
						title: tituloOperacion,
						showConfirmButton: false,
						timer: 1500
					});
					listarSeminariosProgramados();
				}
			});
		}
	});
};


const inicializarInputsModalEditarSeminario = (data) => {
	$("#spanNombres").text(`${data.trabajador_apellidos} ${data.trabajador_nombres}`)
	listarTipoSeminario("#cboTipoSeminario", data.tiposeminario_id);
	listarGrupoAcademico("#cboGrupoAcademico", data.grupoacademico_id);
	initDatePicker("#dpFechaSeminario");
	debugger
	$("#dpFechaSeminario").val(data.fecha_seminario);
	$("#txtHoraInicio").val(data.hora_inicio);
	$("#txtHoraFin").val(data.hora_fin);
	$("#txtObservacion").val(data.observacion);
};


const editarSeminario = () => {
	swal({
		type: 'success',
		title: '¡Seminario editado exitosamente!',
		showConfirmButton: false,
		timer: 1500
	});
};

const mostrarModalEditarSeminario = (data) => {
	ajaxModal.get("docentesporhoras/programacionSeminario/editarSeminario.jspf").then((response) => {
		swal({
			title: '<strong>Editar seminario</strong>',
			html: response.data,
			showCloseButton: true,
			showCancelButton: true,
			focusConfirm: false,
			confirmButtonText: '<i class="icon-checkmark2"></i> Editar seminario',
			confirmButtonAriaLabel: 'Editar seminario',
			cancelButtonText: '<i class="icon-cross3"></i>Cancelar',
			cancelButtonAriaLabel: 'Thumbs down',
			width: '30%',
			customClass: 'swal2-overflow',
			onOpen: () => {
				inicializarInputsModalEditarSeminario(data);
			}
		}).then((result) => {
			if (result.value) {
				editarSeminario();
			}
		});
	});
};

const mostrarModalVerDetalleSeminario = (data) => {

};

const mostrarModalEliminarSeminario = (data) => {
	let {id, estado} = data;
	let titulo = "";
	let textoConfirmacion = ""
	let tituloOperacion = "";
//	if (estado == 0) {
	titulo = 'Está seguro de eliminar el seminario?';
	textoConfirmacion = 'Sí, eliminar!';
	tituloOperacion = '¡Eliminado exitosamente!';
	estado = -1;
//	}

	swal({
		title: titulo,
		text: "",
		type: 'warning',
		showCancelButton: true,
		confirmButtonColor: '#3085d6',
		cancelButtonColor: '#d33',
		confirmButtonText: textoConfirmacion
	}).then((result) => {
		if (result.value) {
			ajaxWebService.patch(`${URI_DOCENTES_PROGRAMACION_SEMINARIO}/${id}`, {estado}).then((response) => {
				if (response.status) {
					swal({
						type: 'success',
						title: tituloOperacion,
						showConfirmButton: false,
						timer: 1500
					});
					listarSeminariosProgramados();
				}
			});
		}
	});
};

function listarSeminariosProgramados(objParams = {}){
	ajaxWebService.get(URI_DOCENTES_PROGRAMACION_SEMINARIO, objParams).then((response) => {
		let columns = getColumns();

		let wrapsNameDatatable = `divDatatable`;
		let classNameForDatatable = `display table table-bordered`;

		makeDatatable(
			wrapsNameDatatable,
			{
				data: response.data,
				columns
			},
			classNameForDatatable,
			).then((nodes) => {
			nodes.container
				.off()
				.on("click", ".verdetalle", function () {
					let data = nodes.datatable.DataTable().row($(this).parents("tr")).data();
					mostrarModalVerDetalleSeminario(data);
				})
				.on("click", ".editar", function () {
					let data = nodes.datatable.DataTable().row($(this).parents("tr")).data();
					mostrarModalEditarSeminario(data);
				})
				.on("click", ".eliminar", function () {
					let data = nodes.datatable.DataTable().row($(this).parents("tr")).data();
					mostrarModalEliminarSeminario(data);
				})
				.on("click", ".aceptar", function () {
					let data = nodes.datatable.DataTable().row($(this).parents("tr")).data();
					mostrarModalAprobarSeminario(data);
				})
				.on("click", ".rechazar", function () {
					let data = nodes.datatable.DataTable().row($(this).parents("tr")).data();
					mostrarModalRechazarSeminario(data);
				});
		});
	});
}

const aplicarFiltro = () => {

};

const listarTipoSeminario = (nodeIdentifier, selectedValue = "") => {
	ajaxWebService.get(URI_DOCENTES_TIPO_SEMINARIO).then((response) => {
		let tiposSeminario = response.data;
		tiposSeminario = _.orderBy(tiposSeminario, s => s.descripcion);
		let html = `<option value="">[SELECCIONE]</option>`;
		html += tiposSeminario.map(tipoSeminario => `<option value="${tipoSeminario.id}">${tipoSeminario.descripcion}</option>`);
		$(nodeIdentifier).html(html);
		$(nodeIdentifier).val(selectedValue);
	});
};

const listarGrupoAcademico = (nodeIdentifier, selectedValue = "") => {
	ajaxWebService.get(URI_DOCENTES_GRUPO_ACADEMICO).then((response) => {
		let gruposacademicos = response.data;
		gruposacademicos = _.orderBy(gruposacademicos, grupoAcademico => grupoAcademico.descripcion);
		let html = `<option value="">[SELECCIONE]</option>`;
		html += gruposacademicos.map(grupoAcademico => `<option value="${grupoAcademico.id}">${grupoAcademico.descripcion}</option>`);
		$(nodeIdentifier).html(html);
		$(nodeIdentifier).val(selectedValue);
	});
};


const inicializarInputsModalNuevoSeminario = () => {
	listarPersonal("#cboDocentes");
	listarTipoSeminario("#cboTipoSeminario");
	listarGrupoAcademico("#cboGrupoAcademico");
	initDatePicker("#dpFechaSeminario");
};

const registrarSeminario = () => {
	let trabajador = $("#cboDocentes").select2('data')[0];
	let trabajador_id = trabajador.id;
	let trabajador_apellidos = trabajador.apellidos;
	let trabajador_nombres = trabajador.nombres;
	let trabajador_documentoidentidad = "";
	let tiposeminario_id = $("#cboTipoSeminario").val();
	let tiposeminario_descripcion = $("#cboTipoSeminario option:selected").text();
	let grupoacademico_id = $("#cboGrupoAcademico").val();
	let grupoacademico_descripcion = $("#cboGrupoAcademico option:selected").text();
	let fecha_seminario = $("#dpFechaSeminario").val();
	let hora_inicio = $("#txtHoraInicio").val();
	let hora_fin = $("#txtHoraFin").val();
	let observacion = $("#txtObservacion").val();

	let params = {
		trabajador_id,
		trabajador_apellidos,
		trabajador_nombres,
		trabajador_documentoidentidad,
		tiposeminario_id,
		tiposeminario_descripcion,
		grupoacademico_id,
		grupoacademico_descripcion,
		fecha_seminario,
		hora_inicio,
		hora_fin,
		observacion,
		estado: 0
	};

	ajaxWebService.post(URI_DOCENTES_PROGRAMACION_SEMINARIO, params)
		.then((response) => {
			if (response.status) {
				swal({
					type: 'success',
					title: '¡Seminario registrado exitosamente!',
					showConfirmButton: false,
					timer: 1500
				});
				listarSeminariosProgramados();
			} else {
				swal({
					type: 'success',
					title: '¡No ha sido posible registrar el seminario!',
					showConfirmButton: false,
					timer: 1500
				})
			}

		});



};

const mostrarModalNuevoSeminario = () => {
	ajaxModal.get("docentesporhoras/programacionSeminario/registroSeminario.jspf").then((response) => {
		swal({
			title: '<strong>Registro de seminario</strong>',
			html: response.data,
			showCloseButton: true,
			showCancelButton: true,
			focusConfirm: false,
			confirmButtonText: '<i class="icon-checkmark2"></i> Registrar seminario',
			confirmButtonAriaLabel: 'Registrar seminario',
			cancelButtonText: '<i class="icon-cross3"></i>Cancelar',
			cancelButtonAriaLabel: 'Thumbs down',
			width: '30%',
			customClass: 'swal2-overflow',
			onOpen: () => {
				inicializarInputsModalNuevoSeminario();
			}
		}).then((result) => {
			if (result.value) {
				registrarSeminario();
			}
		});
	});
};



$(document).ready(function () {
	$("#btnNuevoSeminario").click(mostrarModalNuevoSeminario);
	$("#btnMostrarTodo").click(listarSeminariosProgramados);
	$("#btnAplicarFiltro").click(aplicarFiltro);
	listarPersonal("#cboDocenteFiltro");
	listarSedes("#cboSedesFiltro");
	initDatePicker("#dpFechaInicioFiltro", "#dpFechaFinFiltro");
});