using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OliviaAddIn
{

    /**
    *	@file RecogidaDef.cs
    *	Clase con definiciones de recogida comunes al proyecto Olivia y a Geofoto.
    */
    /**
    *	Clase con definiciones de recogida comunes al proyecto Olivia y a Geofoto.
    */

    class RecogidaDef
    {
        //*************************************************************************************
        //Enums y structs generales   
        /**
        * Nombre de los campos (de las capas) sobre los que se realizarán consultas para la recogida
        */
        public struct Campos
        {
            public string cons_id;          //<Campo a consultar de la capa de contenedores para leer el id
            public string cons_nomrec;      //<Campo a consultar de la capa de contenedores para leer el nombre del tipo de recogida
            public string cons_lateral;     //<Campo a consultar de la lateralidad del tipo de recogida
            public string cons_fracc;       //<Campo a consultar de la capa de contenedores para leer la fracción
            public string cons_capac;       //<Campo a consultar de la capa de contenedores para leer la capacidad
            public string cons_uds;         //<Campo a consultar de la capa de contenedores para leer las unidades
            public string cons_kgrec;       //<Campo a consultar de la capa de contenedores para leer los kg de la recogida
            public string cons_id_sens;     //<Campo a consultar de la capa de sensores para leer el id
            public string cons_url_sens;    //<Campo a consultar de la capa de sensores para leer el umbral de llenado
            public string cons_fecha_sens;  //<Fecha de inicio para los sensores
            public string cons_fechaf_sens; //<de la capa de sensores para leer la fecha de fin
            public DateTime fecha_sens;     //<Fecha de inicio para los sensores
            public DateTime fechaf_sens;    //<Fecha final para los sensores
            public string cons_id_csv;      //<Campo a consultar de la capa de datos externos para leer el id
            public string cons_llen_csv;    //<Campo a consultar de la capa de datos externos para leer el umbral de llenado
            public string cons_fecha_csv;    //<Campo a consultar de la capa de datos externos para leer el umbral de llenado
            public string cons_fechai_csv;   //<Fecha de inicio para los datos externos 
            public string cons_fechaf_csv;  //<de la capa de datos externos para leer la fecha de fin
            public DateTime fechai_csv;      //<Fecha de inicio para los datos externos
            public DateTime fechaf_csv;     //<Fecha final para los datos externos
        }
        /**
        * Nombre de los parámetros que intervienen en el cálculo para la recogida
        */
        public struct Parametros
        {
            public static int t_vaciM;          //<Tiempo de vaciado máximo admitido
            public static int t_vacim;          //<Tiempo de vaciado mínimo admitido
            public static int t_llegsalM;       //<Tiempo de llegada y salida a las instalaciones máximo admitido
            public static int t_llegsalm;       //<Tiempo de llegada y salida a las instalaciones mínimo admitido
            public static int t_llegsal;        //<Tiempo de llegada y salida establecido
            public static int t_descM;          //<Tiempo de descarga máximo admitido
            public static int t_descm;          //<Tiempo de descarga mínimo admitido
            public static int t_desc;           //<Tiempo de descarga establecido
            public static int t_convM;          //<Tiempo de convenio máximo admitido
            public static int t_convm;          //<Tiempo de convenio mínimo admitido
            public static int t_conv;           //<Tiempo de convenio establecido
            public static int t_descansoM;      //<Tiempo de descanso máximo admitido
            public static int t_descansom;      //<Tiempo de descanso mínimo admitido
            public static int t_descanso;       //<Tiempo de descanso establecido
            public static int h_inicio;         //<Hora de inicio de la jornada de trabajo
            public static int dens_vehi_org;    //<Densidades en camión para fraccion orgánica
            public static int dens_vehi_res;    //<Densidades en camión para fraccion resto
            public static int dens_vehi_env;    //<Densidades en camión para fraccion envases
            public static int dens_vehi_pap;    //<Densidades en camión para fraccion Papel y Cartón
            public static int dens_vehi_vid;    //<Densidades en camión para fraccion vidrio
            public static int dens_vehi_otr;    //<Densidades en camión para fraccion otra
            public static int dens_cont_org;    //<Densidades en contenedor para fraccion orgánica
            public static int dens_cont_res;    //<Densidades en contenedor para fraccion resto
            public static int dens_cont_env;    //<Densidades en contenedor para fraccion envases
            public static int dens_cont_pap;    //<Densidades en contenedor para fraccion Papel y Cartón
            public static int dens_cont_vid;    //<Densidades en contenedor para fraccion vidrio
            public static int dens_cont_otr;    //<Densidades en contenedor para fraccion otra
            public static double anch_vehi_3;   //<Ancho del vehículo de 3 ejes
            public static double anch_vehi_2;   //<Ancho del vehículo de 2 ejes
            public static double anch_vehi_s;   //<Ancho del vehículo Satélite
            public static double rad_giro_3;    //<Radio de giro del vehículo de 3 ejes
            public static double rad_giro_2;    //<Radio de giro del vehículo de 2 ejes
            public static double rad_giro_s;    //<Radio de giro del vehículo Satélite
            public static int t_vaci_tra;       //<Tiempo de vaciado para cargas trasera
            public static int t_vaci_lat;       //<Tiempo de vaciado para cargas lateral
            public static int t_vaci_sup;       //<Tiempo de vaciado para cargas superior
            public static int t_vaci_bi;        //<Tiempo de vaciado para cargas bilateral
            public static int t_vaci_bol;       //<Tiempo de vaciado para cargas bolseo
            public static int t_vaci_lav;       //<Tiempo de vaciado para cargas lavado
            public static int t_vaci_otr;       //<Tiempo de vaciado para cargas otra
            public static int kgmaxM;           //<Kg máximo que puede llevar un vehículo
            public static int kgmaxm;           //<Kg mínimo que puede llevar un vehículo
            public static int carga_maxM;       //<Carga máxima para recoger los contenedores
            public static int carga_maxm;       //<Carga mínima para recoger los contenedores
        };
        /**
         * Fracciones.
         * Tipos de residuos a recoger
         */ 
        public enum TiposFracción
        {
            Organica,         //<Fracción Orgánica
            Resto,            //<Fracción de Restos 
            Envases,          //<Fracción de Envases
            Papel,            //<Fracción de Papel y Cartón
            Vidrio,           //<Fracción de Vidrio
            Otra,             //<Fracción genérica para otro tipo de residuos
            N
        }
        /**
         * Tipo de carga del vehículo
         */ 
        public enum TiposCarga
        {
            Trasera,            //<Carga trasera
            Lateral,            //<Carga lateral
            Superior,           //<Carga superior
            Bilateral,          //<Carga bilaterar
            BolseoPtaPta,       //<Bolseo / Puerta a Puerta
            Lavado,             //<Lavado de contenedores
            Otra,               //<Carga genérica para otro tipo de cargas
            N           
        }
        /**
         * Tipo de vehículo
         */
        public enum TiposVehic
        {
            Ejes3,              //<Vehículo de 3 ejes
            Ejes2,              //<Vehículo de 2 ejes
            Satelite,           //<Vehículo satélite
            N
        }
        /**
        * Tipo de lateralidad de carga de los vehículos
        */
        public enum Lateralidad
        {
            Ambos,              //<Carga por ambos lados del camión
            Dcha,               //<Carga por lado derecho del camión
            Izqda,              //<Carga por lado izquierdo del camión
            N
        }        
        //*************************************************************************************
        //Variables
        /** 
        * Array de cadenas de caracteres enumerando los tipos de fracción
        */
        public static String[] tipos_fracc_str = new String[(int)RecogidaDef.TiposFracción.N - 1];
        /** 
        * Array de cadenas de caracteres enumerando los tipos de carga
        */
        public static String[] tipos_carg_str = new String[(int)RecogidaDef.TiposCarga.N - 1];
        /** 
        * Array de strings con los prefijos de la fracción para la importación de capas a la GDB
        */
        public static String[] preffracc_gdb = new String[(int)RecogidaDef.TiposFracción.N];
        /** 
        * Array de strings con los prefijos de las cargas para la importación de capas a la GDB
        */
        public static String[] prefcarg_gdb = new String[(int)RecogidaDef.TiposCarga.N];
        /** 
        * Array de strings con nombres de los sibmolos referentes al tipo de recogida de basuras
        */
        public static String[] nombre_simbrec_vsm = new String[20];
        /** 
        * Array de strings con los tipos de recogida de basuras
        */
        public static String[] simb_rec_vsm = new String[9];
        /** 
        * Array de strings con los tipos de basuras
        */
        public static String[] simb_tipbasura = new String[5];
        /**
         * Densidades de residuos en el camión, una vez compactados, en función de la fracción, en kg/m3
         */ 
        public static int[] dens_frac_cami = new int[(int)RecogidaDef.TiposFracción.N];
        /**
         * Densidades de residuos en el contenedor, en función de la fracción, en kg/m3
         */
        public static int[] dens_frac_cont = new int[(int)RecogidaDef.TiposFracción.N];
        /**
         * Anchura de los vehículos en función del tipo
         */
        public static double[] ancho_vehic = new double[(int)RecogidaDef.TiposVehic.N];
        /**
        * Ángulo de giro de los vehículos en función del tipo en grados
        */
        public static double[] giro_vehic = new double[(int)RecogidaDef.TiposVehic.N];
        /**
         * Tiempo de vaciado de los contenedores en función del tipo de carga, en segundos
         */
        public static int[] t_vaci = new int[(int)RecogidaDef.TiposCarga.N];
        /** 
        * Array de cadenas de caracteres enumerando los tipos de lateralidad de carga
        */
        public static String[] tipos_lateralidad = new String[(int)RecogidaDef.Lateralidad.N];
        /**
         * Kg de recogida del contenedor
         */
        public static int kgrec_cont;
        /*
        * indica si se ha marcado la opción de campo de kg recogida, si no es un valor fijo
        */
        public static bool kgrec_camp = false; 
        /*
        * indica si se ha marcado la opción de recoger sólo los contenedores llenos en el diálogo de las propiedades de los campos de recogida
        */
        public static bool lleno = false;  
        /**
         * Nombres de los campos
         */
        public static Campos campos;
        /**
         * Nombres por defecto de los campos
         */
        public static Campos campos_def;
        /*
         * array de las diferentes consltas de atributos a realizar en la capa de recogida.
         */
        public static string[] filtro_str = null;
        /** 
         * Array de cadenas de caracteres enumerando los tipos de vehículos
         */
        public static String[] tipos_vehic_str = new String[(int)RecogidaDef.TiposVehic.N];

        //************************************************************************

        /**
        * Inicializa la matriz de strings con los nombres de los sibmolos referentes al tipo de recogida de basuras
        */
        public static void rellena_simbrec_vsm()
        {
            RecogidaDef.nombre_simbrec_vsm[0] = "Autocompactador";
            RecogidaDef.nombre_simbrec_vsm[1] = "Bilateral";
            RecogidaDef.nombre_simbrec_vsm[2] = "Bolseo";
            RecogidaDef.nombre_simbrec_vsm[3] = "Caja_Abierta";
            RecogidaDef.nombre_simbrec_vsm[4] = "Neumatica";
            RecogidaDef.nombre_simbrec_vsm[5] = "Pilas";
            RecogidaDef.nombre_simbrec_vsm[6] = "CL Envases";
            RecogidaDef.nombre_simbrec_vsm[7] = "Cl Papel";
            RecogidaDef.nombre_simbrec_vsm[8] = "CL Vidrio";
            RecogidaDef.nombre_simbrec_vsm[9] = "CL Organica";
            RecogidaDef.nombre_simbrec_vsm[10] = "CL Resto";
            RecogidaDef.nombre_simbrec_vsm[11] = "CT Envases";
            RecogidaDef.nombre_simbrec_vsm[12] = "CT Papel";
            RecogidaDef.nombre_simbrec_vsm[13] = "CT Vidrio";
            RecogidaDef.nombre_simbrec_vsm[14] = "CT Organica";
            RecogidaDef.nombre_simbrec_vsm[15] = "CT Resto";
            RecogidaDef.nombre_simbrec_vsm[16] = "Iglu Envases";
            RecogidaDef.nombre_simbrec_vsm[17] = "Iglu Papel";
            RecogidaDef.nombre_simbrec_vsm[18] = "Iglu Vidrio";
            RecogidaDef.nombre_simbrec_vsm[19] = "Soterrados";
        }
    }
}
