using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SisNetBase;
using OliviaDef;
using System.IO;
using System.Windows.Forms;

namespace OliviaAddIn
{
    /**
    *	@file EjecutaLimp.cs
    *	Clase con funciones para ejecución del programa en modo limpieza viaria.
    *	Hace la llamada correspondiente a Geofoto con los parámetros seleccionados.
    */
    class EjecutaLimp : Ejecuta
    {
        //*************************************************************************************
        //Variables 
        public Limpieza limp;
        //*************************************************************************************
        //Métodos
        public EjecutaLimp()
        {
            err_str = "";
        }

        /**
         * Comienza las funciones de ejecución
         * modo 0 la primera vez, va a sectorizar, modo 1 la segunda vez, planifica
         */
        public bool ejec(Limpieza limp, int modo)
        {
            if (limp == null)
            {
                err_str = "Error en la recopilación de datos para el procesado";
                return false;
            }

            OliviaGlob.tip_oliv = OliviaDef.GeneralDef.TiposOliv.OlivLimp;

            if (!OliviaGlob.gdb_limp.exporta(limp, modo == (int)Ejecuta.ModosEjec.Planif))
            {
                err_str = OliviaGlob.gdb_limp.err_st;
                return false;
            } 
                        
            //configura el string de opciones
            if (!configura_ops_geo(limp,modo))
            {
                err_str = "Error al configurar opciones";
                return false;
            }

            this.limp = limp;

            //Llama al ejecuta del padre
            return base.ejec();
           
        }

        /**
         * Configura el str de opciones que va a mandar a geofoto
         * modo 0 la primera vez, va a sectorizar, modo 1 la segunda vez, planifica
         */
        public bool configura_ops_geo(Limpieza limp, int modo)
        {
            string str;
            string modo_str="";
            int r = 0;

            if ((limp.tipo_tto < 0) || (limp.tipo_tto >= (int)LimpiezaDef.TiposTto.TtoN))
                return false;

            if (limp.rest_circ[(int)limp.tipo_tto])
                r=1; //restricción de circulación  

            if(modo==0)
                modo_str = GeneralDef.SockConf;
            else if(modo==1)
                modo_str = GeneralDef.SockConfPlan;

            //van ParamLimpN parámetros, sin incluir "CONFIGURACION", si se añaden, incrementar ParamLimpN                
            str = GeneralDef.EjecGeoParamSep + modo_str + " " +
                GeneralDef.EjecGeoParamSep + GeneralDef.GL_tto + GeneralDef.EjecGeoParamIgual + limp.t_tto + " " +
                GeneralDef.EjecGeoParamSep + GeneralDef.GL_res + GeneralDef.EjecGeoParamIgual + r + " " +
                GeneralDef.EjecGeoParamSep + GeneralDef.GL_uto + GeneralDef.EjecGeoParamIgual + (int)limp.uds_t_tto + " " +
                GeneralDef.EjecGeoParamSep + GeneralDef.GL_vdp + GeneralDef.EjecGeoParamIgual + limp.v_despl + " " +
                GeneralDef.EjecGeoParamSep + GeneralDef.GG_tco + GeneralDef.EjecGeoParamIgual + limp.t_conv + " " +
                GeneralDef.EjecGeoParamSep + GeneralDef.GG_tdc + GeneralDef.EjecGeoParamIgual + limp.t_descan + " " +
                GeneralDef.EjecGeoParamSep + GeneralDef.GL_tdp + GeneralDef.EjecGeoParamIgual + limp.t_despl_insta + " " +
                GeneralDef.EjecGeoParamSep + GeneralDef.GL_tca + GeneralDef.EjecGeoParamIgual + limp.t_descarg + " " +
                GeneralDef.EjecGeoParamSep + GeneralDef.GG_hini + GeneralDef.EjecGeoParamIgual + limp.h_ini + " " +
                GeneralDef.EjecGeoParamSep + GeneralDef.GG_trafic + GeneralDef.EjecGeoParamIgual + limp.trafico + " " +
                GeneralDef.EjecGeoParamSep + GeneralDef.GG_npt + GeneralDef.EjecGeoParamIgual + limp.n_ptsctrl + " " +
                GeneralDef.EjecGeoParamSep + GeneralDef.GG_sec + GeneralDef.EjecGeoParamIgual + limp.n_secdef + " " +
                GeneralDef.EjecGeoParamSep + GeneralDef.GL_anc + GeneralDef.EjecGeoParamIgual + limp.ancho_via + " " +
                GeneralDef.EjecGeoParamSep + GeneralDef.GG_coox + GeneralDef.EjecGeoParamIgual + limp.coords_instala[0] + " " +//coordenadas
                GeneralDef.EjecGeoParamSep + GeneralDef.GG_cooy + GeneralDef.EjecGeoParamIgual + limp.coords_instala[1] + " " +//coordenadas
                GeneralDef.EjecGeoParamSep + GeneralDef.GG_ais + GeneralDef.EjecGeoParamIgual + limp.aislados + " " +
                GeneralDef.EjecGeoParamSep + GeneralDef.GG_pd + GeneralDef.EjecGeoParamIgual + OliviaGlob.Paths.PathData + " " +
                GeneralDef.EjecGeoParamSep + GeneralDef.GG_pn + GeneralDef.EjecGeoParamIgual + OliviaGlob.Paths.PathNW  + " ";

            base.str_cfg = str;

            return true;
        }
        
    }
}
