<?php

////////////////////////////////////////////////////////////////////////
// LEGUMES /////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////

// LIST

$allowLegumesListOrder = array(
    'ref' => "réf.",
    'nom' => "nom"
);

function getNbLegumesInList($search=false) {
    $sql = getCountLegumesListSelectBaseSQL()." WHERE ".LEGUMES_TABLE.".`del`=0";
    $sql = buildSqlSearch($sql, $search, buildLegumesListSearchSQL);
    $r = $GLOBALS['db_admin']['man']->select($sql, 1);
    if(!$r['erreur']) return intval($r['datas']['nb']);
    else {
        $er = "</br>sql: ".$sql."</br>error: ".getReadableVar($r['erreur']);
        return "Une erreur est survenue durant du nombre d'item dans la liste !".$er;
    }
}

function getLegumesList($order='nom',$sens='ASC', $search=false, $limits=false) {
    // TARIF & DATE ORDRE
    $grps = getPaniersGroupesList();
    $tarif_date_orders = array();
    foreach($grps as $g) { $tarif_date_orders[] = "tarif_".$g["ref"]; $orders[] = "date_".$g["ref"]; }
    
    $list = array();
    
    $sql = getLegumesTableSelectBaseSQL()." WHERE ".LEGUMES_TABLE.".`del`=0";
    
    // SEARCH
    $sql = buildSqlSearch($sql, $search, buildLegumesListSearchSQL);
    
    // ORDRE
    $sql.=" ORDER BY ";
    
    if($order=='ref') $sql .= LEGUMES_TABLE.".`ref`";
    else if($order=='nom') $sql .= LEGUMES_TABLE.".`nom`";
    else $sql .= LEGUMES_TABLE.".`nom`";
    
    // SENS
    if($sens=='DESC') $sql .= ' DESC';
    else $sql .= ' ASC';
    
    // LIMITS
    if(is_array($limits) && !in_array($order, $tarif_date_orders)) $sql .= " LIMIT ".$limits['start'].", ".$limits['nbItemsByPage'];
        
    $r = $GLOBALS['db_admin']['man']->select($sql);

    if(!$r['erreur']) {
        foreach($r['datas'] as $i) {
            $i["tarifs"] = getLegumeTarifs($i['ref']);
            foreach($i["tarifs"] as $g => $t) {
                if($t["ref"] >0) {
                    $i["tarif_".$g] = $t["prix"];
                    $i["date_".$g] = $t["dateObj"];
                }
                else {
                    $i["tarif_".$g] = false;
                    $i["date_".$g] = false;
                }
            }
            $i["next_tarifs"] = getLegumeTarifs($i['ref'], 'next');
            $list[$i['ref']] = $i;
        }
    }
    else {
        $er = "</br>sql: ".$sql."</br>error: ".getReadableVar($r['erreur']);
        $GLOBALS['errors'][] = "Une erreur est survenue durant la récupération de la liste des légumes dans le base de données !".$er;
    }
    
    if(in_array($order, $tarif_date_orders)) {
        $list = orderListByKey($list, $order, $sens);
        if(is_array($limits)) $list = array_slice($list, $limits['start'], $limits['nbItemsByPage']);
    }
    
    return $list;
}

function getLegumesAutocompleteList() {
    $list = array();
    
    $term = trim($_REQUEST['search']); // get user autocomplete input
    $term = preg_replace('/\s+/', ' ', $term); // replace multiple spaces by one
    $parts = explode(' ', $term);
    
    $sql = getLegumesTableSelectBaseSQL()." WHERE ".LEGUMES_TABLE.".`del`=0";
    foreach($parts as $p) $sql .= " AND (".buildLegumesListSearchSQL($p).")";
    
    $groupe = false;
    if(isset($_REQUEST['groupe']) && (int)$_REQUEST['groupe']>0) $groupe = intval($_REQUEST['groupe']);
    $date = false;
    if(isset($_REQUEST['date']) && isValidDate($_REQUEST['date'], "mysql_date")) $date = $_REQUEST['date'];
    
    $r = $GLOBALS['db_admin']['man']->select($sql);
    
    if(!$r['erreur']) {
        foreach($r['datas'] as $l) {
            // TARIF
            $t = getLegumeTarif($l['ref'], $groupe, $date, false);
            if($t) {
                $row = array(
                    "id" => $l['ref'],
                    "value" => $l['nom'],
                    "label" => $l['nom'],
                    
                    "ref" => $l['ref'],
                    "tarif_ref" => $t['ref'],
                    "tarif_prix" => $t['prix'],
                    "tarif_unite" => $t['unite']
                );
                array_push($list, $row);
            }
        }
        
        $a_json = apply_highlight($list, $parts); // highlight search parts
    }
    else {
        $er = "</br>sql: ".$sql."</br>error: ".getReadableVar($r['erreur']);
        $GLOBALS['errors'][] = "Une erreur est survenue durant la récupération de la liste des légumes !".$er;
    }
    return $list;
}

// GET DATAS

function getLegumeDatas($id) {
    $i = array();
    
    $sql = getLegumesTableSelectBaseSQL()." WHERE ".LEGUMES_TABLE.".`ref`=".intval($id);
    
    $r = $GLOBALS['db_admin']['man']->select($sql,1);

    if(!$r['erreur']) {
        $i = $r['datas'];
        
        $i["tarifs_list"] = getLegumeTarifsList($i['ref']);
        $i["tarifs"] = getLegumeTarifs($i['ref']);
        $i["next_tarifs"] = getLegumeTarifs($i['ref'], 'next');
    }
    else {
        $er = "</br>sql: ".$sql."</br>error: ".getReadableVar($r['erreur']);
        $GLOBALS['errors'][] = "Une erreur est survenue durant la récupération des informations du légume dans le base de données !".$er;
    }
    
    return $i;
}

// ADD / UPDATE DATAS

function getLegumeDatasFromRequest() { 
    $datas = getRequestTableDatas(LEGUMES_TABLE_STRUCT);
    
    // TARIFS
    $datas["tarifs"] = array();
    if(isset($_REQUEST["tarifs"])) $datas["tarifs"] = json_decode($_REQUEST["tarifs"], true);
    
    return $datas;
}

function addLegume($datas) {
    return addDatasInTable(
        $GLOBALS['db_admin']['man'],    // DB MANAGER
        LEGUMES_TABLE,                  // TABLE NAME
        LEGUMES_TABLE_STRUCT,           // TABLE STRUCTURE
        $datas,                         // DATAS
        "du légume"                     // ERROR STRING
    );
}

function updateLegume($id, $datas) { 
    return updateDatasInTable(
        $GLOBALS['db_admin']['man'],    // DB MANAGER
        LEGUMES_TABLE,                  // TABLE NAME
        LEGUMES_TABLE_STRUCT,           // TABLE STRUCTURE
        $id,                            // ID
        $datas,                         // DATAS
        "au légume",                    // NULL STRING
        "du légume"                     // ERROR STRING
    );
}

function deleteLegume($id) {
    return deleteItemInTable(
        $GLOBALS['db_admin']['man'],    // DB MANAGER
        LEGUMES_TABLE,                  // TABLE NAME
        $id,                            // ID
        "du légume"                     // ERROR STRING
    );
}

function eraseLegume($id) {
    return eraseItemInTable(
        $GLOBALS['db_admin']['man'],    // DB MANAGER
        LEGUMES_TABLE,                  // TABLE NAME
        $id,                            // ID
        "du légume"                     // ERROR STRING
    );
}

////////////////////////////////////////////////////////////////////////
// LEGUMES - TARIFS ////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////

function getLegumeTarifsList($legume) {
    $list = array();
    
    $sql = getLegumesTarifsTableSelectBaseSQL()
        ." WHERE ".LEGUMES_TARIFS_TABLE.".`legume`=".intval($legume)
        ." AND ".LEGUMES_TARIFS_TABLE.".`del`=0"
        ." ORDER BY ".LEGUMES_TARIFS_TABLE.".`date` DESC, ".LEGUMES_TARIFS_TABLE.".`ref` DESC";
    
    $r = $GLOBALS['db_admin']['man']->select($sql);

    if(!$r['erreur']) {
        foreach($r['datas'] as $i) {
            $i["print"] = $i["prix"]." €/".$i["unite"];
            $i["date_print"] = formatDate($i["date"], "mysql_date", "print_date");
            $i["use"] = getLegumeTarifUtilise($i['ref']);
            $list[] = $i;
        }
    }
    else {
        $er = "</br>sql: ".$sql."</br>error: ".getReadableVar($r['erreur']);
        $GLOBALS['errors'][] = "Une erreur est survenue durant la récupération de la liste des tarifs du légume dans le base de données !".$er;
    }
    
    return $list;
}

function getLegumeTarifs($legume, $date=false) {
    $groupes = getPaniersGroupesList();
    $list = [];
    
    $tarifToutGrp = getLegumeTarif($legume, 0, $date);
    
    foreach($groupes as $g) {
        $tarif = array(
            "groupe_ref" => $g['ref'],
            "groupe_nom" => $g['nom'],
            "ref" => 0
        );
        
        $tarifGrp = getLegumeTarif($legume, $g['ref'], $date, false);
        if(is_array($tarifGrp)) {
            $tarif["ref"] = intval($tarifGrp["ref"]);
            $tarif["prix"] = $tarifGrp["prix"];
            $tarif["unite"] = $tarifGrp["unite"];
            $tarif["print"] = $tarifGrp["print"];
            $tarif["date"] = $tarifGrp["date"];
            $tarif["date_print"] = $tarifGrp["date_print"];
            $tarif["tarif_groupe"] = $g['ref'];
        }
        
        $list[$g['ref']] = $tarif;
    }
    
    return $list;
}

function getLegumeTarif($legume, $groupe, $date=false, $groupe_exclusif=true) {
    $i = false;
    
    $sql = getLegumesTarifsTableSelectBaseSQL()
        ." WHERE ".LEGUMES_TARIFS_TABLE.".`legume`=".intval($legume)
        ." AND ".LEGUMES_TARIFS_TABLE.".`del`=0";
    
    // GROUPE
    if($groupe>0) {
        if($groupe_exclusif) $sql .= " AND ".LEGUMES_TARIFS_TABLE.".`groupe`=".intval($groupe);
        else $sql .= " AND (".LEGUMES_TARIFS_TABLE.".`groupe`=".intval($groupe)
                    ." OR ".LEGUMES_TARIFS_TABLE.".`groupe`=0"
                    ." OR ".LEGUMES_TARIFS_TABLE.".`groupe` IS NULL)";
    }
    else $sql .= " AND (".LEGUMES_TARIFS_TABLE.".`groupe` IS NULL OR ".LEGUMES_TARIFS_TABLE.".`groupe`=0)";
    
    // DATE
    if($date == 'next') {
        $date = formatDate('', '', 'mysql_date');
        $sql .= " AND ".LEGUMES_TARIFS_TABLE.".`date`>'".$date."'";
    }
    else {
        if(!isValidDate($date, "mysql_date")) $date = formatDate('', '', 'mysql_date');
        $sql .= " AND ".LEGUMES_TARIFS_TABLE.".`date`<='".$date."'";
    }
    
    $sql .= " ORDER BY ".LEGUMES_TARIFS_TABLE.".`date` DESC, ".LEGUMES_TARIFS_TABLE.".`ref` DESC";
    
    $r = $GLOBALS['db_admin']['man']->select($sql);

    if(!$r['erreur']) {
        if(count($r['datas'])>0) {
            $i = $r['datas'][0];
            $i["dateObj"] = new DateTime($i["date"]);
            $i["print"] = $i["prix"]." €/".$i["unite"];
            $i["date_print"] = formatDate($i["date"], "mysql_date", "print_date");
        }
    }
    else {
        $er = "</br>sql: ".$sql."</br>error: ".getReadableVar($r['erreur']);
        $GLOBALS['errors'][] = "Une erreur est survenue durant la récupération des informations du tarif du légume dans le base de données !".$er;
    }
    
    return $i;
}

function getLegumeTarifUtilise($tarif) {
    $use = false;
    
    $sql = "SELECT COUNT(*) as 'use' FROM ".LIVRAISONS_LEGUMES_TABLE." WHERE tarif=".intval($tarif);
    addDebug($sql);
    
    $r = $GLOBALS['db_admin']['man']->select($sql,1);

    if(!$r['erreur']) $use = (int)$r['datas']["use"]>0;
    else {
        $er = "</br>sql: ".$sql."</br>error: ".getReadableVar($r['erreur']);
        $GLOBALS['errors'][] = "Une erreur est survenue durant l'analyse d'utilisation du tarif de légume dans le base de données !".$er;
    }
    
    return $use;
}

function addLegumeTarif($datas) {
    return addDatasInTable(
        $GLOBALS['db_admin']['man'],    // DB MANAGER
        LEGUMES_TARIFS_TABLE,           // TABLE NAME
        LEGUMES_TARIFS_TABLE_STRUCT,    // TABLE STRUCTURE
        $datas,                         // DATAS
        "du tarif"                      // ERROR STRING
    );
}

function updateLegumeTarif($id, $datas) {
    return updateDatasInTable(
        $GLOBALS['db_admin']['man'],    // DB MANAGER
        LEGUMES_TARIFS_TABLE,           // TABLE NAME
        LEGUMES_TARIFS_TABLE_STRUCT,    // TABLE STRUCTURE
        $id,                            // ID
        $datas,                         // DATAS
        "du tarif",                     // NULL STRING
        "au tarif"                      // ERROR STRING
    );
}

function deleteLegumeTarif($id) {
    return deleteItemInTable(
        $GLOBALS['db_admin']['man'],    // DB MANAGER
        LEGUMES_TARIFS_TABLE,           // TABLE NAME
        $id,                            // ID
        "du tarif"                      // ERROR STRING
    );
}

function eraseLegumeTarif($id) {
    return eraseItemInTable(
        $GLOBALS['db_admin']['man'],    // DB MANAGER
        LEGUMES_TARIFS_TABLE,           // TABLE NAME
        $id,                            // ID
        "du tarif"                      // ERROR STRING
    );
}

////////////////////////////////////////////////////////////////////////
// PRINT LIST //////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////

function printLegumesList() {
    $GLOBALS['smarty'] -> assign('logo', "file://".PUBLIC_HTML_ADMIN_PATH."/img/logo.png");
    $GLOBALS['smarty'] -> assign('date', formatDate('', '', 'print_date'));
    $GLOBALS['smarty'] -> assign('time', formatDate('', '', 'print_time'));
    $GLOBALS['smarty'] -> assign('cssFiles',array(
        "file://".PUBLIC_HTML_ADMIN_PATH."css/bootstrap_print_light.css",
        "file://".PUBLIC_HTML_ADMIN_PATH."css/print.css"
    ));

    $html = $GLOBALS['smarty']->fetch("legumes/legumes_list_print.tpl");

    $dompdf = new Dompdf\Dompdf(["chroot" => ROOT_DIR_PATH]);
    $dompdf->loadHtml($html);
    $dompdf->setPaper('A4', "portrait");
    $options = $dompdf->getOptions();
    $options->setIsRemoteEnabled(true);
    $dompdf->setOptions($options);

    $dompdf->render();
    $dompdf->stream("Liste des légumes (".formatDate('', '', 'strdate').").pdf");
    exit();
}
