<?php
//Référence les fonctions utiles pour les consolidés
require_once("../../../modules/pmsi/import_rss_rsf/utils/import_functions.php");

global $environmentVars;
global $iCTI_connexion;

//////////////////////  ANNEE ET MOIS //////////////////////

/**
 * Transforme une année A3 en 202301
 * @param string $year_AX doit être du type A2 ou 2023
 * @return int 
 */
function transform_AX_in_annee_mois($year_AX)
{
	$annee = date("Y") - 2;

	if (empty($year_AX)) {
		return intval($annee . "01");
	}

	if (is_year_AX($year_AX)) {
		//année en cours moins nombre années demandées
		$annee = transform_AX_in_year($year_AX);
	}

	if (strlen($year_AX) === 4 && intval($year_AX)) {
		// si années écrit en dur
		$annee = $year_AX;
	}

	return intval($annee . "01");
}

/**
 * Détermine si le paramètre est du type '202304'
 * @return bool 
 */
function is_annee_mois($annee_mois)
{
	$annee_mois = trim($annee_mois);

	if (strlen($annee_mois) <> 6) {
		return false;
	}
	$annee_now = date("Y");
	$annee = intval(substr($annee_mois, 0, 4));
	$mois  = intval(substr($annee_mois, -2));

	if ($mois < 1 || $mois > 12) {
		return false;
	}
	if ($annee > $annee_now) {
		return false;
	}

	return true;
}

/**
 * Détermine si le paramètre est une chaine de charatère du type '202304, 202305, 202306'
 */
function is_annee_mois_array($mois_forces)
{
	$annee_mois_array = explode(",", $mois_forces);

	foreach ($annee_mois_array as $annee_mois) {
		if (!is_annee_mois($annee_mois)) {
			return false;
		}
	}
	return true;
}


function find_min_year($years)
{
	$years_array = explode(',', $years);

	function cast_to_int($year)
	{
		return intval($year);
	};

	$years_int = array_map('cast_to_int', $years_array);
	return min($years_int);
}


/**
 * Crée la liste au format string des annees mois '202201, 202202, 202203'
 * des séjours présent après le parametre $annee_mois_force
 */
function get_list_annee_mois($annee_mois_force)
{

	global $iCTI_connexion;

	$mois_sortie_concat = "0";
	$sqlcmd = "	WITH w_mois AS
					(
					SELECT mois
					FROM base.p_calendrier
					WHERE mois BETWEEN $annee_mois_force AND TO_CHAR(NOW(), 'YYYYMM')
					GROUP BY mois
					ORDER BY mois
					)
				SELECT base.cti_group_concat(mois) AS mois_sortie_concat
				FROM w_mois;";

	$record = pg_fetch_array($iCTI_connexion->query($sqlcmd));
	if ($record) {
		$mois_sortie_concat = $record["mois_sortie_concat"];
	}


	return $mois_sortie_concat;
}


////////////////////// PARAMETRES DE COMMANDE //////////////////////


function create_mois_forces($cti_args)
{

	// Paramètre --annee-mois-force
	if (isset($cti_args->args["--annee-mois-force"]) || isset($cti_args->args["-af"])) {
		$annee_mois_force = empty($cti_args->args["--annee-mois-force"]) ? $cti_args->args["-af"] : $cti_args->args["--annee-mois-force"];

		if (is_year_AX($annee_mois_force)) {
			$annee_mois_force = transform_AX_in_year($annee_mois_force) . "01";
		}

		if (!is_annee_mois($annee_mois_force)) {
			logErrorMsg("L'année $annee_mois_force en paramètre de --annee-mois-force doit être du type: 202301 ou A3");
			die_conso();
		}

		return get_list_annee_mois($annee_mois_force);
	}

	// Paramètre --moisforces
	if (isset($cti_args->args["--moisforces"]) || isset($cti_args->args["-mf"])) {
		$moisforces = empty($cti_args->args["--moisforces"]) ?  $cti_args->args["-mf"] : $cti_args->args["--moisforces"];

		if (!is_annee_mois_array($moisforces)) {
			logErrorMsg("L'année en paramètre de -moisforces doit être du type: 202301");
			die_conso();
		}

		return $moisforces;
	}

	return "0";
}

////////////////////// DATABASE //////////////////////

function nettoyage_sejours_bdd($year_to_delete){
	$year_min = date("Y") - 2;
	 if ($year_to_delete && $year_to_delete <= $year_min) {
	 	nettoyer_sejours_jusqua($year_to_delete);
	 } else {
		nettoyer_sejours();
	 }

}

function die_conso()
{
	logErrorMsg("Arrêt de la génération");
	die();
}

function iCTI_disconnect()
{

	global $iCTI_connexion;

	$iCTI_connexion->close();
}
