<?php

/**
* This file is part of XNova:Legacies
*
* @license http://www.gnu.org/licenses/gpl-3.0.txt
* @see http://www.xnova-ng.org/
*
* Copyright (c) 2009-Present, XNova Support Team <http://www.xnova-ng.org>
* All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*
*                                --> NOTICE <--
*  This file is part of the core development branch, changing its contents will
* make you unable to use the automatic updates manager. Please refer to the
* documentation for further information about customizing XNova.
*
*/

function DefensesBuildingPage ( &$CurrentPlanet, $CurrentUser ) {
     global $lang, $resource, $phpEx, $dpath, $_POST, $CombatCaps;

    includeLang('infos');


    if (isset($_POST['fmenge'])) {
        // On vient de Cliquer ' Construire '

        // Et y a une liste de doléances
        // Ici, on sait precisement ce qu'on aimerait bien construire ...

        // Gestion de la place disponible dans les silos !
        $Missiles[502] = $CurrentPlanet[ $resource[502] ];
        $Missiles[503] = $CurrentPlanet[ $resource[503] ];
        $SiloSize      = $CurrentPlanet[ $resource[44] ];
        $MaxMissiles   = $SiloSize * 10;
        // On prend les missiles deja dans la queue de fabrication aussi (ca aide)
        $BuildQueue    = $CurrentPlanet['b_hangar_id'];
        $BuildArray    = explode (";", $BuildQueue);
        for ($QElement = 0; $QElement < count($BuildArray); $QElement++) {
            $ElmentArray = explode (",", $BuildArray[$QElement] );
            if       ($ElmentArray[502] != 0) {
                $Missiles[502] += $ElmentArray[502];
            } elseif ($ElmentArray[503] != 0) {
                $Missiles[503] += $ElmentArray[503];
            }
        }
        foreach($_POST['fmenge'] as $Element => $Count) {
            // Construction d'Element recuperés sur la page de Flotte ...
            // ATTENTION ! La file d'attente Flotte est Commune a celle des Defenses
            // Dans fmenge, on devrait trouver un tableau des elements constructibles etdu nombre d'elements souhaités

            $Element = intval($Element);
            $Count   = intval($Count);
            if ($Count > MAX_FLEET_OR_DEFS_PER_ROW) {
                $Count = MAX_FLEET_OR_DEFS_PER_ROW;
            }


            if ($Count != 0) {
                // Cas particulier (Petit Bouclier et Grand Bouclier
                // ne peuvent exister qu'une seule et unique fois
                $InQueue = strpos ( $CurrentPlanet['b_hangar_id'], $Element.",");
                if ($Element == 407) {
                      $IsBuild = ($CurrentPlanet[$resource[407]] >= 1) ? true : false;
                      if ($InQueue === false && !$IsBuild) {
                         $Count = 1;
                      }
                   } else if($Element == 408) {
                      $IsBuild = ($CurrentPlanet[$resource[408]] >= 1) ? true : false;
                      if ($InQueue === false && !$IsBuild) {
                         $Count = 1;
                      	 }
					  } else if($Element == 409) {
                      $IsBuild = ($CurrentPlanet[$resource[409]] >= 1) ? true : false;
                      if ($InQueue === false && !$IsBuild) {
                         $Count = 1;
                      } 
                   }
// On verifie si on a les technologies necessaires a la construction de l'element
                if ( IsTechnologieAccessible ($CurrentUser, $CurrentPlanet, $Element) ) {
                    // On verifie combien on sait faire de cet element au max
                    $MaxElements   = GetMaxConstructibleElements ( $Element, $CurrentPlanet );

                    // Testons si on a de la place pour ces nouveaux missiles !
                    if ($Element == 502 || $Element == 503) {
                        // Cas particulier des missiles
                        $ActuMissiles  = $Missiles[502] + ( 2 * $Missiles[503] );
                        $MissilesSpace = $MaxMissiles - $ActuMissiles;
                        if ($Element == 502) {
                            if ( $Count > $MissilesSpace ) {
                                $Count = $MissilesSpace;
                            }
                        } else {
                            if ( $Count > floor( $MissilesSpace / 2 ) ) {
                                $Count = floor( $MissilesSpace / 2 );
                            }
                        }
                        if ($Count > $MaxElements) {
                            $Count = $MaxElements;
                        }
                        $Missiles[$Element] += $Count;
                    } else {
                        // Si pas assez de ressources, on ajuste le nombre d'elements
                        if ($Count > $MaxElements) {
                            $Count = $MaxElements;
                        }
                    }

                    $Ressource = GetElementRessources ( $Element, $Count );
                    $BuildTime = GetBuildingTime($CurrentUser, $CurrentPlanet, $Element);
                    if ($Count >= 1)
                    {
                        if ($BuildTime > 0)
                        {
                            $CurrentPlanet['metal'] -= $Ressource['metal'];
                            $CurrentPlanet['crystal'] -= $Ressource['crystal'];
                            $CurrentPlanet['deuterium'] -= $Ressource['deuterium'];
                            $CurrentPlanet['b_hangar_id'] .= "{$Element},{$Count};";
                        }
                        else
                        {                        
                            $QryUpdateDefense = "
                                UPDATE     {{table}}
                                SET     `{$resource[$Element]}` = `{$resource[$Element]}` + '{$Count}'
                                WHERE     `id` = '{$CurrentPlanet['id']}'";
                            
                            doquery ( $QryUpdateDefense, 'planets');
                        }
                    }

}
            }
        }
    }

    // -------------------------------------------------------------------------------------------------------
    // S'il n'y a pas de Chantier ...
    if ($CurrentPlanet[$resource[21]] == 0) {
        // Veuillez avoir l'obligeance de construire le Chantier Spacial !!
        message($lang['need_hangar'], $lang['tech'][21]);
    }

    // -------------------------------------------------------------------------------------------------------
    // Construction de la page du Chantier (car si j'arrive ici ... c'est que j'ai tout ce qu'il faut pour ...
    $TabIndex = 0;
    
    // Tableaux qui comporteront les valeurs d'attaque limite de chaque catégorie
    $valeurs_shield_lo = array();
    $valeurs_shield_hi = array();
    
    // Tableau qui comportera la mise en forme de chaque catégorie avec les défenses
    $PageTableTemp = array();
    
    // Définit l'attaque minimale que doit posséder une défense pour entrer dans une catégorie
    $valeurs_shield_lo[0] = 0;
    $valeurs_shield_lo[1] = 80;
    $valeurs_shield_lo[2] = 251;
    $valeurs_shield_lo[3] = 3001;
    
    // 1° Catégorie >>> Défense ayant une attaque comprise entre 0 et 150
    // 2° Catégorie >>> Défense ayant une attaque comprise entre 151 et 2.000
    // 3° Catégorie >>> Défense ayant une attaque comprise entre 2.001 et 500.000
    // 4° Catégorie >>> Défense ayant une attaque strictement supérieur à 500.000 ( Définit par $valeurs_shield_lo[3] )
    
    // Définit l'attaque maximale de chaque catégorie
    $valeurs_shield_hi[0] = 100;
    $valeurs_shield_hi[1] = 250;
    $valeurs_shield_hi[2] = 3000;
    
    // Pour modifier rapidement le titre des catégories
    $Categorie1_Name = "Défense Faible";
    $Categorie2_Name = "Défense Moyenne";
    $Categorie3_Name = "Grande Défense";    
    $Categorie5_Name = "Boucliers énergétiques";
    
    // Pour modifier rapidement le texte des liens rapides
    $LienRapide1_Name = "Défense Faible";
    $LienRapide2_Name = "Défense Moyenne";
    $LienRapide3_Name = "Grande Défense";    
    $LienRapide5_Name = "Boucliers";
    
        // Création des diverses catégories
        $PageTableTemp[0] = "<td class=c id=0 colspan=2 align=center><h2><br><font color=#d4a66a>".$Categorie1_Name."</font></h2></td><th class=k>Nombre à construire</th>";
        $PageTableTemp[0] .= "<td class=c colspan=2 align=center><a href=#0>".$LienRapide1_Name."</a><br><a href=#1>".$LienRapide2_Name."</a><br><a href=#2>".$LienRapide3_Name."</a><br><a href=#4>".$LienRapide5_Name."</a>";
        $PageTableTemp[1] = "<td class=c id=1 colspan=2 align=center><h2><br><font color=#d4a66a>".$Categorie2_Name."</font></h2></td><th class=k>Nombre à construire</th>";
        $PageTableTemp[1] .= "<td class=c colspan=2 align=center><a href=#0>".$LienRapide1_Name."</a><br><a href=#1>".$LienRapide2_Name."s</a><br><a href=#2>".$LienRapide3_Name."</a><br><a href=#4>".$LienRapide5_Name."</a>";
        $PageTableTemp[2] = "<td class=c id=2 colspan=2 align=center><h2><br><font color=#d4a66a>".$Categorie3_Name."</font></h2></td><th class=k>Nombre à construire</th>";
        $PageTableTemp[2] .= "<td class=c colspan=2 align=center><a href=#0>".$LienRapide1_Name."</a><br><a href=#1>".$LienRapide2_Name."</a><br><a href=#2>".$LienRapide3_Name."</a><br><a href=#4>".$LienRapide5_Name."</a>";
        $PageTableTemp[4] = "<td class=c id=4 colspan=2 align=center><h2><br><font color=#d4a66a>".$Categorie5_Name."</font></h2></td><th class=k>Nombre à construire</th>";
        $PageTableTemp[4] .= "<td class=c colspan=2 align=center><a href=#0>".$LienRapide1_Name."</a><br><a href=#1>".$LienRapide2_Name."</a><br><a href=#2>".$LienRapide3_Name."</a><br><a href=#4>".$LienRapide5_Name."</a>";

    $PageTable = "";
    // Boucle nécessaire pour répartir les défenses dans les 4 catégories
    For ( $i = 0; $i < 5; $i++)
    {        
        foreach($lang['tech'] as $Element => $ElementName) {
            if ($Element > 400 && $Element <= 599) {
                if (IsTechnologieAccessible($CurrentUser, $CurrentPlanet, $Element)) {
                    // Disponible Ã  la construction
                    
                    // On teste si la défense actuellement parcouru par foreach doit être ajouté à la catégorie actuelle
                    if ( $CombatCaps[$Element]['shield'] >= $valeurs_shield_lo[$i] && $CombatCaps[$Element]['shield'] <= $valeurs_shield_hi[$i] && $i != 3 && $Element != 407 && $Element != 408 && $Element != 409
                            || $CombatCaps[$Element]['shield'] > $valeurs_shield_lo[$i] && $i == 3 && $Element != 407 && $Element != 408 && $Element != 409
                            || ( $Element == 407 || $Element == 408 || $Element == 409 ) && $i == 4) {
                        // On regarde si on peut en acheter au moins 1
                        $CanBuildOne         = IsElementBuyable($CurrentUser, $CurrentPlanet, $Element, false);
                        // On regarde combien de temps il faut pour construire l'element
                        $BuildOneElementTime = GetBuildingTime($CurrentUser, $CurrentPlanet, $Element);
                        // DisponibilitÃ© actuelle
                        $ElementCount        = $CurrentPlanet[$resource[$Element]];
                        $ElementNbre         = ($ElementCount == 0) ? "" : " (".$lang['dispo'].": " . pretty_number($ElementCount) . ")";

                        // Construction des 3 cases de la ligne d'un element dans la page d'achat !
                        // DÃ©but de ligne
                        $PageTableTemp[$i] .= "\n<tr>";

                        // Imagette + Link vers la page d'info
                        $PageTableTemp[$i] .= "<th class=l>";
                        $PageTableTemp[$i] .= "<a href=infos.".PHPEXT."?gid=".$Element.">";
                        $PageTableTemp[$i] .= "<img border=0 src=\"".$dpath."gebaeude/".$Element.".gif\" align=top width=120 height=120></a>";
                        $PageTableTemp[$i] .= "</th>";

                        // Description
                        $PageTableTemp[$i] .= "<td class=l>";
                        $PageTableTemp[$i] .= "<a href=infos.".PHPEXT."?gid=".$Element."><font color=#FFC000>".$ElementName."</font></a> ".$ElementNbre."<br>";
                        $PageTableTemp[$i] .= "".$lang['res']['descriptions'][$Element]."<br>";
                        // On affiche le 'prix' avec eventuellement ce qui manque en ressource
                        $PageTableTemp[$i] .= GetElementPrice($CurrentUser, $CurrentPlanet, $Element, false);
                        // On affiche le temps de construction (c'est toujours tellement plus joli)
                        $PageTableTemp[$i] .= ShowBuildTime($BuildOneElementTime);
                        $PageTableTemp[$i] .= "</td>";

                        // Case nombre d'elements a construire
                        
                        // Si ... Et Seulement si je peux construire je mets la p'tite zone de saisie
                        if ($CanBuildOne)
                        {
                            $InQueue = strpos ( $CurrentPlanet['b_hangar_id'], $Element.",");
                            $IsBuild = ($CurrentPlanet[$resource[$Element]] >= 1) ? true : false;
                            $BuildIt = true;
                    
                            if ($Element == 407 || $Element == 408 || $Element == 409)
                            {
                                $BuildIt = false;
                                if ( $InQueue === false && !$IsBuild) {
                                    $BuildIt = true;
                                }
                            }
                            if ( !$BuildIt ) {
                                $PageTableTemp[$i] .= "<th class=k></th>";
                                $PageTableTemp[$i] .= "<th class=k width=150><font color=\"red\">".$lang['only_one']."</font></th>";
                            } else {
                                $TabIndex++;
                                $PageTableTemp[$i] .= "<th class=k>";
                                $PageTableTemp[$i] .= "<input type=text name=fmenge[".$Element."] alt='".$lang['tech'][$Element]."' size=5 maxlength=5 value=0 tabindex=".$TabIndex.">";
                                $PageTableTemp[$i] .= "</th>";
                                $PageTableTemp[$i] .= "<th class=k width=150>";
                                $maxElement = GetMaxConstructibleElements($Element, $CurrentPlanet);
                                if ($maxElement > MAX_FLEET_OR_DEFS_PER_ROW) $maxElement = MAX_FLEET_OR_DEFS_PER_ROW;
                                $PageTableTemp[$i] .= "<br><input type=button value=\"Max {$maxElement}\" href='java script:' onclick=\"document.getElementsByName('fmenge[".$Element."]')[0].value = '$maxElement';\">";
                                $PageTableTemp[$i] .= "</th>";
                                
                            }
                            
                        }
                        else
                            $PageTableTemp[$i] .= "<th colspan=\"2\" style=\"color: red;\">Pas assez de ressources</th>";
                                              

                        // Fin de ligne (les 3 cases sont construites !!
                        $PageTableTemp[$i] .= "</tr>";
                    }                    
                }
            }        
        }
        $PageTableTemp[$i] .= "\n<tr></tr>";
    }
    
    // Quand on arrive là, tous les défenses ont été mis dans les catégories appropriées
    // On réunit toutes les mises en formes de chaque catégorie dans une seule et unique variable
    For ( $i = 0; $i < 5; $i++) {
        $PageTable .= $PageTableTemp[$i];
    }


    if ($CurrentPlanet['b_hangar_id'] != '') {
        $BuildQueue .= ElementBuildListBox( $CurrentUser, $CurrentPlanet );
    }

    $parse = $lang;
    // La page se trouve dans $PageTable;
    $parse['buildlist']    = $PageTable;
    // Et la liste de constructions en cours dans $BuildQueue;
    $parse['buildinglist'] = $BuildQueue;
    // fragmento de template
    $page .= parsetemplate(gettemplate('buildings_defense'), $parse);

    display($page, $lang['Defense']);

}
// Version History
// - 1.0 Modularisation
// - 1.1 Correction mise en place d'une limite max d'elements constructibles par ligne
// - 1.2 Correction limitation bouclier meme si en queue de fabrication
//
?>