<?php
if ( ! function_exists('pr')) {
	function pr($string = '') {
		echo '<pre>';
		print_r($string);
		echo '</pre>';
		echo '/************************************************************/';
		echo '<br />';
	}
}

if ( ! function_exists('prx')) {
	function prx($string = '') {
		echo '<pre>';
		print_r($string);
		echo '</pre>';
		echo '<br />';
		echo 'Proceso finalizado por prx()';
		die;
	}
}

if ( ! function_exists('getPost')) {
	function getPost($input, $data) {
		$newData = [];
		foreach ($data as $d) {
			$newData[$d] = $input->post($d);
		}
		return $newData;
	}
}

if ( ! function_exists('tr')) {
	function tr($data) {
		$r = '<tr>';
		foreach ($data as $d) {
			$r .= '<td>' . $d . '</td>';
		}
		$r . '</tr>';
		return $r;
	}
}

if ( ! function_exists('clp')) {
	function clp($value) {
		return number_format ($value, 0, "," , ".");
	}
}

/**
 * Convierte año-mes a nombre legible en español. Ej: Feberero 2022
 */
if ( ! function_exists('mtt')) {
	function mtt($am) {
		$meses = [
			'01' => 'Enero',
			'02' => 'Febrero',
			'03' => 'Marzo',
			'04' => 'Abril',
			'05' => 'Mayo',
			'06' => 'Junio',
			'07' => 'Julio',
			'08' => 'Agosto',
			'09' => 'Septiembre',
			'10' => 'Octubre',
			'11' => 'Noviembre',
			'12' => 'Diciembre'
		];

		if (strlen($am) == 6) {
			$a = substr($am, 2, 2);
			$m = substr($am, 4, 2);

			$r = $meses[$m] . ' 20' . $a;
		}
		else if (strlen($am) == 4) {
			$r = $am;
		}
		else if (strlen($am) == 2) {
			$m = substr($am, 0, 2);
			$r = $meses[$m];
		}
		else if ($am == 0){
			$r = 'Todos los tiempos';
		}
		return $r;
	}
}

/**
 * Retorna una fecha en formato d-m-Y
 */
if ( ! function_exists('fecha')) {
	function fecha($value) {
		$f = formatearFechaUI($value);
		if (empty($f)) {
			return 'Sin fecha';
		}
		return $f;
	}
}


/**
 * Retorna una fecha en formato d/m/Y
 */
if ( ! function_exists('formatearFechaUI')) {
	function formatearFechaUI($fechaHora)
	{
		if (
			empty($fechaHora) ||
			$fechaHora === '0000-00-00' ||
			$fechaHora === '0000-00-00 00:00:00'
		) {
			return '';
		}

		// Si viene como YYYYMMDD
		if (preg_match('/^\d{8}$/', $fechaHora)) {
			$year = substr($fechaHora, 0, 4);
			$month = substr($fechaHora, 4, 2);
			$day = substr($fechaHora, 6, 2);

			return "{$day}/{$month}/{$year}";
		}

		// Si viene como YYYY-MM-DD o con hora
		$fecha = explode(' ', $fechaHora)[0];

		if (strpos($fecha, '-') !== false) {
			[$year, $month, $day] = explode('-', $fecha);
			return "{$day}/{$month}/{$year}";
		}

		return '';
	}
}

/**
 * Retorna una fecha en formato d/m/Y H:m:s
 */
if ( ! function_exists('formatearFechaHoraUI')) {
	function formatearFechaHoraUI($fechaHora)
	{
		if (
			empty($fechaHora) ||
			$fechaHora === '0000-00-00 00:00:00'
		) {
			return '';
		}

		$partes = explode(' ', $fechaHora);
		$fecha  = $partes[0];
		$hora   = $partes[1] ?? null;

		[$year, $month, $day] = explode('-', $fecha);

		if (!$hora) {
			return "{$day}/{$month}/{$year}";
		}

		[$hh, $mm, $ss] = explode(':', $hora);

		return "{$day}/{$month}/{$year} {$hh}:{$mm}:{$ss}";
	}
}

/**
 * Retorna una fecha indicando dia de la semana en formato l d-m-Y. Ej: Lunes 12-02-2022
 */
if ( ! function_exists('fechaDia')) {
	function fechaDia($value) {
		$dias = [
			'0' => 'Domingo',
			'1' => 'Lunes',
			'2' => 'Martes',
			'3' => 'Miércoles',
			'4' => 'Jueves',
			'5' => 'Viernes',
			'6' => 'Sábado'
		];

		$fecha = $dias[date('w', strtotime($value))] . ' ' .date('d/m/Y', strtotime($value));
		if (strtotime($value) <= strtotime('01-01-1970')) {
			$fecha = 'Sin fecha';
		}
		return $fecha;
	}
}



/**
 * Retorna una fecha en formato d/m/Y H:i. Ej: 12/02/2022 17:55
 */
function fechaHora($value, $segundos = 1, $sep = '/') {
	$f = formatearFechaHoraUI($value);
	if (empty($f)) {
		return 'Sin fecha';
	}
	// Si explícitamente NO quieren segundos
	if (!$segundos) {
		$partes = explode(' ', $f);
		if (isset($partes[1])) {
			$hora = explode(':', $partes[1]);
			$f = $partes[0] . ' ' . $hora[0] . ':' . $hora[1];
		}
	}
	return $f;
}

/**
 * Retorna una fecha en formato Ym. Ej: 202201
 * $value String en formato fecha
 */
if ( ! function_exists('ym')) {
	function ym($value) {
		if ($value == '') {
			$fecha = '';
		}
		else if ($value == '1970-01-01') {
			$fecha = '';
		}
		else if ($value == '0000-00-00') {
			$fecha = '';
		}
		else if ($value == '0000-00-00 00:00:00') {
			$fecha = '';
		}
		else {
			$fecha = date('Ym', strtotime($value));
		}
		return $fecha;
	}
}

if ( ! function_exists('isDate')) {
	function isDate ($fecha) {
		if (empty($fecha)) {
			return false;
		}
		else if ($fecha == '1970-01-01' || $fecha == '1970-01-01 00:00:00') {
			return false;
		}
		else if ($fecha == '0000-00-00' || $fecha == '0000-00-00 00:00:00') {
			return false;
		}

		// Si no es vacía se asume correcta
		return true;
	}
}

/**
 * Normaliza una cadena de texto reemplazando caracteres extraños
 */
if ( ! function_exists('normaliza')) {
	function normaliza ($cadena){
			$originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ
	ßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';
			$modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuy
	bsaaaaaaaceeeeiiiidnoooooouuuyybyRr';
			$cadena = utf8_decode($cadena);
			$cadena = strtr($cadena, utf8_decode($originales), $modificadas);
			$cadena = strtolower($cadena);
			return utf8_encode($cadena);
	}
}

/**
 * Formatea una cadena de texto para slug
 */
if ( ! function_exists('slugify')) {
	function slugify ($cadena){
		$cadena = normaliza(str_replace(' ', '-', $cadena));
		return utf8_encode($cadena);
	}
}

/**
 * Escribe link de archivo js incluyendo una variable para actualizar cuando hayan cambios
 */
if ( ! function_exists('js')) {
	function js($archivo) {
		$version = 20260514;
		$update = date('Ymd') . '-' . intval(date('G')/6);
		$url = base_url() . 'js/' . $archivo . '?v='.$version.'&t=' . $update;
		return $url;
	}
}
/**
 * Escribe link de archivo js incluyendo una variable para actualizar cuando hayan cambios
 */
if ( ! function_exists('css')) {
	function css($archivo) {
		$version = 20260420;
		$update = date('Ymd') . '-' . intval(date('G')/6);
		$url = base_url() . 'css/' . $archivo . '?v='.$version.'&t=' . $update;
		return $url;
	}
}


/**
 * Muestra badge danger si se cumple la condición
 */
if ( ! function_exists('danger_badge')) {
	function danger_badge ($monto, $tipo, $limite) {
		if ($tipo == 'mayor') {
			if ($monto > $limite && $monto > 0) {
				$html = '<span class="badge badge-pill badge-danger">' . $monto . '</span>';
			}
			else {
				$html = $monto;
			}
		}

		if ($tipo == 'menor') {
			if ($monto < $limite) {
				$html = '<span class="badge badge-pill badge-danger">' . $monto . '</span>';
			}
			else {
				$html = $monto;
			}
		}

		if ($tipo == 'distinto') {
			if ($monto != $limite) {
				$html = '<span class="badge badge-pill badge-danger">' . $monto . '</span>';
			}
			else {
				$html = $monto;
			}
		}

		return $html;
	}
}

/**
 * Muestra badge success si int > 0
 */
if ( ! function_exists('success_badge')) {
	function success_badge ($valor) {
		if ($valor > 0) {
			$html = '<span class="badge badge-pill badge-success">' . $valor . '</span>';
		}
		else {
			$html = 0;	
		}
		return $html;
	}
}

/**
 * Muestra badge warning si int > 0
 */
if ( ! function_exists('warning_badge')) {
	function warning_badge ($valor) {
		if ($valor > 0) {
			$html = '<span class="badge badge-pill badge-warning">' . $valor . '</span>';
		}
		else {
			$html = 0;
		}
		return $html;
	}
}

/**
 * Muestra badge primary
 */
if ( ! function_exists('primary_badge')) {
	function primary_badge ($valor) {
		$html = '<span class="badge badge-pill badge-primary">' . $valor . '</span>';
		return $html;
	}
}

/**
 * Escribe link de archivo js incluyendo una variable para actualizar cuando hayan cambios
 */
if ( ! function_exists('ps_image')) {
	function ps_image ($idImage) {
		$urlSmall = 'https://dementegames.cl/' . $idImage . '-small_default/img.jpg';
		$url = 'https://dementegames.cl/' . $idImage . '-medium_default/img.jpg';

		$tag = '<img class="imagen-producto-view tt" title="<img src=\'' . $url . '\'>" src="' . $urlSmall . '"></img>';
		return $tag;
	}
}

if ( ! function_exists('ps_image')) {
	function ps_image ($idImage) {
		$urlSmall = 'https://dementegames.cl/' . $idImage . '-small_default/img.jpg';
		$url = 'https://dementegames.cl/' . $idImage . '-medium_default/img.jpg';

		$tag = '<img class="imagen-producto-view tt" title="<img src=\'' . $url . '\'>" src="' . $urlSmall . '"></img>';
		return $tag;
	}
}

function resize_image($file, $w, $h, $crop = FALSE, $enlarge = false) {
	$imageInfo = getimagesize($file);
	$width = $imageInfo[0];
	$height = $imageInfo[1];
	$type = $imageInfo['mime'];

	if ($enlarge || $width > $w || $height > $h) {
		$r = $width / $height;
		if ($crop) {
			if ($width > $height) {
				$width = ceil($width - ($width * abs($r - $w / $h)));
			} else {
				$height = ceil($height - ($height * abs($r - $w / $h)));
			}
			$newWidth = $w;
			$newHeight = $h;
		} else {
			if ($w/$h > $r) {
				$newWidth = $h * $r;
				$newHeight = $h;
			} else {
				$newHeight = $w / $r;
				$newWidth = $w;
			}
		}
	} else {
		$newWidth = $width;
		$newHeight = $height;
	}

	$src = '';

	$exif = false;
	$exif = @exif_read_data($file);

	if ($exif && isset($exif['Orientation'])) {
		$ort = $exif['Orientation'];
		// Intercambia medidas si viene rotada
		if (in_array($ort, [6, 5, 8, 7])) {
			$tmpWidth = $width;
			$width = $height;
			$height = $tmpWidth;

			$tmpNewWidth = $newWidth;
			$newWidth = $newHeight;
			$newHeight = $tmpNewWidth;
		}
	}
	$dst = imagecreatetruecolor($newWidth, $newHeight);
	switch ($imageInfo['mime']) {
		case 'image/jpeg':
			$src = imagecreatefromjpeg($file);
			break;
		case 'image/gif':
			$src = imagecreatefromgif($file);
			break;
		case 'image/png':
			imagealphablending($dst, false);
			imagesavealpha($dst, true);
			$transparent = imagecolorallocatealpha($dst, 255, 255, 255, 127);
			imagefilledrectangle($dst, 0, 0, $newWidth, $newHeight, $transparent);
			$src = imagecreatefrompng($file);
			break;
	}

	// Verifica si la imagen viene girada por informacion exif
	if ($src && $exif && isset($exif['Orientation'])) {
		$ort = $exif['Orientation'];

		if ($ort == 6 || $ort == 5) {
			$src = imagerotate($src, 270, null);
		}
		if ($ort == 3 || $ort == 4) {
			$src = imagerotate($src, 180, null);
		}
		if ($ort == 8 || $ort == 7) {
			$src = imagerotate($src, 90, null);
		}

		if (in_array($ort, [5, 4, 7])) {
			imageflip($src, IMG_FLIP_HORIZONTAL);
		}
	}

	imagecopyresampled($dst, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
	return $dst;
}


/**
 * @param $image objeto imagen
 * @param $destiny ruta completa donde debe guardarse la imagen
 */
function save_image($image, $destiny, $mime, $overwrite = false) {
	if (!$overwrite) {
		$path = pathinfo($destiny);
		$i = 0;
		while (file_exists($destiny)) {
			$i++;
			$destiny = $path['dirname'] . '/' . $path['basename'] . '-' . $i . '.' . $path['extension'];
		}
	}

	switch ($mime) {
		case 'image/jpeg':
			if (imagejpeg($image, $destiny)) {
				return $destiny;
			}
			break;
		case 'image/gif':
			if (imagegif($image, $destiny)) {
				return $destiny;
			}
			break;
		case 'image/png':
			imagealphablending($image, false);
			imagesavealpha($image, true);
			if (imagepng($image, $destiny)) {
				return $destiny;
			}
			break;
	}

	return false;
}

/**
 * @param $int codigo ean de 12 digitos
 */
function dv_ean13($int) {
	$code = strval($int);
	$weightflag = true;
	$sum = 0;
	for ($i = strlen($code) - 1; $i >= 0; $i--) {
		$sum += (int)$code[$i] * ($weightflag?3:1);
		$weightflag = !$weightflag;
	}
	return (10 - ($sum % 10)) % 10;
}

function generatePassword($length) {
	$key = "";
	$pattern = "123456789abcdefghijkmnopqrstuvwxyz";
	$max = strlen($pattern)-1;
	for($i = 0; $i < $length; $i++){
		$key .= substr($pattern, mt_rand(0,$max), 1);
	}
	return $key;
}

/**
 * Retorna info y links de paginación
 * Datos necesarios en array datos: url, parametros, pagina, cantidad, total
 */
if ( ! function_exists('paginacion')) {
	function paginacion ($datos) {
		extract($datos);

		$max = 0;
		if ($cantidad > 0) {
			$max = ceil($total/$cantidad);
		}

		$inicial = (($pagina - 1) * $cantidad) + 1;
		$final = $pagina < $max ? $pagina * $cantidad : $total;
		$result['info'] = 'Mostrando ' . $inicial . '-' . $final . ' de ' . $total;

		if (empty($parametros)) {
			$parametros = '?';
		}
		if($parametros != '?') {
			$parametros .= '&';
		}
		$url .= $parametros;

		$html = '<ul class="pagination">';

		// Mostrar anterior siempre??? Sin link cuando corresponda?

		//Link anterior "<"
		if ($pagina > 1) {
			$anterior = $pagina - 1;
			$html .= '<li class="page-item"><a rel="prev" class="page-link" href="' . $url . 'pagina=' . $anterior .'">Anterior</a></li>';
			$html .= '<li class="page-item"><a rel="nofollow" class="page-link" href="' . $url . 'pagina=1">1</a></li>';
		}

		if ($pagina > 4) {
			$html .= '<li class="page-item disabled"><span class="spacer page-link">…</span></li>';
		}
		if ($pagina == $max && $max > 3) {
			$html .= '<li class="page-item"><a rel="nofollow" class="page-link" href="' . $url . 'pagina=' . ($pagina - 2) . '">' . ($pagina - 2) . '</a></li>';
		}

		if ($pagina > 2) {
			$html .= '<li class="page-item"><a rel="nofollow" class="page-link" href="' . $url . 'pagina=' . ($pagina - 1) . '">' . ($pagina - 1) . '</a></li>';
		}

		$html .= '<li class="page-item disabled"><a rel="nofollow" class="page-link" href="' . $url . 'pagina=' . $pagina . '" class="disabled js-search-link">' . $pagina . '</a></li>';

		if ($pagina < ($max-1)) {
			$html .= '<li class="page-item"><a rel="nofollow" class="page-link" href="' . $url . 'pagina=' . ($pagina + 1) . '">' . ($pagina + 1) . '</a></li>';
		}

		if ($pagina == 1 && $max > 3) {
			$html .= '<li class="page-item"><a rel="nofollow" class="page-link" href="' . $url . 'pagina=' . ($pagina + 2) . '" class="disabled js-search-link">' . ($pagina + 2) . '</a></li>';
		}

		if ($pagina < ($max-2)) {
			$html .= '<li class="page-item"><span class="spacer page-link">…</span></li>';
		}

		if ($pagina < $max) {
			$html .= '<li class="page-item"><a rel="nofollow" class="page-link" href="' . $url . 'pagina=' . $max . '">' . $max . '</a></li>';

			// Mostrar Siguiente siempre??? Sin link cuando corresponda?
			$siguiente = $pagina + 1;
			$html .= '<li class="page-item"><a rel="next" class="page-link" href="' . $url . 'pagina=' . $siguiente .'">Siguiente</a></li>';
		}
		$html .= '</ul>';
		$result['links'] = $html;

		return $result;
	}
}


function nombre_mp($idCanal) {
	$marketplacesActivos = $_SESSION['marketplaces_activos'];
	foreach($marketplacesActivos as $mp) {
		if ($idCanal == $mp['id_canal']) {
			return $mp['nombre'];
		}
	}
	return '';
}