package scripts;

import java.util.*;
import java.io.*;
import java.util.stream.Collectors;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.nuiton.topia.TopiaContext;

import fr.ifremer.isisfish.entities.*;
import fr.ifremer.isisfish.equation.*;
import fr.ifremer.isisfish.entities.Strategy;
import fr.ifremer.isisfish.datastore.RegionStorage;
import fr.ifremer.isisfish.IsisFishDAOHelper;

//supprimer (myScript.runIfTrueClean(true)) puis creer (myScript.runIfTrueClean(false)) toutes les strategies pour forcer l'EFFORT 

/**
 * créer les stratégies 

 */
public class CreateStrAllGEMMBE {

    String mystrListFile = PTAtoolboxGEMMBE.DATA_FOLDER + "/semantics/post2511_nouvellesstratOTFRA/liste_stratISIS.csv";

    /** les objets pour manipuler objets isis */
    TopiaContext myTX = RegionStorage.getRegion(PTAtoolboxGEMMBE.REGION_NAME).getStorage().beginTransaction();
    StrategyDAO myStrDAO =  IsisFishDAOHelper.getStrategyDAO(myTX);
    StrategyMonthInfoDAO mySmiDAO = IsisFishDAOHelper.getStrategyMonthInfoDAO(myTX);
    SetOfVesselsDAO myFleetDAO = IsisFishDAOHelper.getSetOfVesselsDAO(myTX);
    List<SetOfVessels> listFleets = IsisFishDAOHelper.getSetOfVesselsDAO(myTX).findAll();

    /** lancer le script dans isis */
    public static void main(String[] args) throws Exception {
        System.out.println("~~~ Start: " + new Date() + " ~~~" + System.lineSeparator());
        CreateStrAllGEMMBE myScript = new CreateStrAllGEMMBE();
        myScript.runIfTrueClean(false); // see definition below
        System.out.println("~~~  Done: " + new Date() + " ~~~");
    }
    /** vrai lancement du script car main() accepte pas ces fx */
    public void runIfTrueClean(boolean cleanup) throws Exception {
        if (cleanup) { // supprimer toutes stratégies
            myStrDAO.deleteAll(myStrDAO
                .findAll()
                .stream()
                .collect(Collectors.toList())
            );
        } else {
            createStr();
        }

        // save the changes
        myTX.commitTransaction();
        myTX.closeContext();
    }

    /** cœur de ce script */
    private void createStr() throws Exception {

    //liste des strategies
    List<String> listStrat = PTAtoolboxGEMMBE.readListTxt(mystrListFile);

    // boucle sur les flottilles de la base
        for (SetOfVessels flt : listFleets) {
            String fltName = flt.getName();
            System.out.println("  > fleet: " + fltName);

    // boucle sur les strategies
        for (String strName : listStrat) {
             System.out.println("  > strat: " + strName);

               //on recupere la flottille de la strategie pour voir si ça matche avec la flottille
             String fleetFromStrat = strName.split("@")[0].trim();
             System.out.println(fleetFromStrat);
             
             if (fleetFromStrat.equals(fltName)) {
                 System.out.println("match ok");
                    
            Strategy str = traiterStrategie(strName);

            //on associe la flottille correspondant à la strategie
            SetOfVessels flt_str = myFleetDAO.findByName(fltName);
            str.setSetOfVessels(flt_str);
            str.update();
            }

          }
        }
      }


            /** chercher si stratégie existe, sinon la créer, puis associer flottille */
    private Strategy traiterStrategie(String strName) {
        Strategy res = myStrDAO.findByName(strName);
        if (res != null) {
            System.out.println("    > strategy exist");
        } else {
            System.out.println("    > strategy create");
            res = myStrDAO.create();
            res.setName(strName);
            res.setProportionSetOfVessels(1);
            //res.setInactivityEquationUsed(true); 
            res.setComment(PTAtoolboxGEMMBE.AUTO_CMT);
            res.update();
        }
        return res;
    }
}   

            



