//attention: cette rgle de gestion ne fonctionne que si le changement a lieu pour toutes
//les annes de simulation


var nomZone="VIIIa"; //entrez le nom de la zone concerne, non si pas de slection sur zone
var engin="chalut jumeau";
var moisDeb=0; //entrez le mois debut de fermeture
var moisFin=11;//entrez le mois de fin de fermeture
var nouvelleValeurParam="100";//entrez la valeur du paramtre contrlable


if (nomZone!="non") {
	var ZoneFermee=SecteurFactory.findByNom(nomZone);
}
var EnginInterdit=EnginFactory.findByNom(engin);
writeln("nom de l'engin interdit "+EnginInterdit.getNom());
var RegionSimu=EnginInterdit.getRegion();
var ListeMetiers=MetierFactory.findAllByRegion(RegionSimu);
var MoisDeb=new Packages.fr.ifremer.nodb.Mois(moisDeb);
var MoisFin=new Packages.fr.ifremer.nodb.Mois(moisFin);
var SaisonFermee= new Packages.fr.ifremer.nodb.Saison(moisDeb,moisFin);




for (var imetier = ListeMetiers.iterator() ; imetier.hasNext();){
    var metier=imetier.next();
    writeln ("metier examin "+metier.getNom()+"son engin "+metier.getEngin().getNom());
    if (!metier.getEngin().equals(EnginInterdit)){
        writeln("l engin du mtier n est pas concern");
    }
    else {
        writeln("l engin du mtier est bien concern");
        if (nomZone=="non" && moisDeb==0 && moisFin==11){
            //aucun critre spatio-temporel il suffit donc de mettre
            //le param controlable  la nouvelle valeur
            metier.setValeurParamControlable(nouvelleValeurParam);
            writeln("aucune spatialisation ni saisonnalit, on passe le Param Controlable a "+nouvelleValeurParam);
        }
        else {   
            var ListeSaisons = metier.getInfoSaison();
            for (var isaisonmetier = ListeSaisons.iterator() ; isaisonmetier.hasNext();){
                var saisonmetier=isaisonmetier.next();
		var saison=saisonmetier.getSaison();
		var taille=0;
                if (nomZone!="non"){
                    var maillefermee=ZoneFermee.getMaille();
                    var MailleMetier=saisonmetier.getSecteur().getMaille().copy();
                    MailleMetier.retainAll(maillefermee);
                    taille=MailleMetier.size();
                }
    		else {
			writeln ("pas de slection de zone, toute la zone d'tude est donc concerne");
		}
                if (nomZone=="non" || taille!=0){
                    if (saison.contains(SaisonFermee)){
                        writeln ("il y a intersection de la zone metier au cours de la saison"+saison.toString());
                        var moisconcerne=saison.copy().toListMois();
                        moisconcerne.retainAll(SaisonFermee.toListMois());
                        var NouveauMetier=MetierFactory.create(metier.getNom()+" Mois "+moisconcerne.get(0).getNumMois()+" a "+moisconcerne.get(moisconcerne.size()-1).getNumMois()+" ValeurParam "+nouvelleValeurParam, RegionSimu, EnginInterdit,nouvelleValeurParam, "mtier cr pendant la simu pour le changement de paramtre contrlable");
                        for (var iinfsais=metier.getInfoSaison().iterator();iinfsais.hasNext();){
				var infsais=iinfsais.next();
				var sais=infsais.getSaison();
				var NouveauInfoSaison=InfoSaisonMetierFactory.create(NouveauMetier, sais, infsais.getSecteur(), "cr durant la simulation")
				NouveauMetier.addInfoSaison(NouveauInfoSaison);
			}

                        //On ajoute aux strategies qui pratiquent le mtier le nouveau mtier
                        var listestrategies=StrategyFactory.findAllByRegion(RegionSimu);
                        for(var i=0; i<listestrategies.size(); i++){
                            var strategie=listestrategies.get(i);
                            var SetOfBateau=strategie.getSetOfVessels();
                            var MetiersPosibles=SetOfBateau.getMetiers();
                            if (MetiersPosibles.contains(metier)){
                                var AncienEffort=SetOfBateau.getEffort(metier);
                                var DescriptionEffort=EffortDescriptionFactory.create(NouveauMetier, SetOfBateau, AncienEffort.getFishingOperation(), AncienEffort.getFishingOperationDuration(), AncienEffort.getGearsNumberPerOperation(), AncienEffort.getCrewSize(), AncienEffort.getUnitCostOfFishing(), AncienEffort.getFixedCrewSalary(), AncienEffort.getCrewShareRate(), AncienEffort.getCrewFoodCost(), AncienEffort.getRepairAndMaintenanceGearCost(), AncienEffort.getLandingCosts(), AncienEffort.getOtherRunningCosts(), "effort description cr durant la simulation");

				SetOfBateau.addPossibleMetiers(DescriptionEffort);

                    //on a ajout le nouveau mtier au set of vessels, maintenant, on va report l'effort du mtier ancien vers le nouveau pour les mois concerns
                                for (var intmois=0; intmois<=11;intmois++){
                                    var mois=new Packages.fr.ifremer.nodb.Mois(intmois);
                                    var PropStratMois=strategie.getStrategyMonthInfo(mois);
                                    var NouveauStrMet=PropStrMetFactory.create(PropStratMois, NouveauMetier, 0, "cr durant la simulation");
				    PropStratMois.addPropStrMet(NouveauStrMet);
				    if (moisconcerne.contains(mois) && PropStratMois.getProportionMetier(metier)!=0){
                                        //on cr un nouveau PropStrMet
                                        writeln ("la stratgie "+strategie.getName()+" pratique bien le metier "+metier.getNom()+" au mois "+mois.getNumMois());
                                        PropStratMois.setProportionMetier(NouveauMetier,PropStratMois.getProportionMetier(metier)); 
                                        PropStratMois.setProportionMetier(metier,0);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
} 