#pragma once
#ifdef OLIVIA_COMPILA
#include "olv_limp.h"
#include "olv_sens_ws.h"

class COlivia;
class Colv_reco_thr;

#define OLV_RECO_GRUPO_SENS				"CAMPOS_SENS"		
#define OLV_RECO_PARAM_FN				"fn"		
#define OLV_RECO_PARAM_ID				"id"		
#define OLV_RECO_PARAM_USR				"usr"	
#define OLV_RECO_PARAM_PWD				"pwd"	
#define OLV_RECO_PARAM_STRD				"startd"	
#define OLV_RECO_PARAM_ENDD				"endd"	
#define OLV_RECO_PARAM_FN_STAT			"fn_status"		
#define OLV_RECO_PARAM_USR_USR			"usr_usr"	
#define OLV_RECO_PARAM_PWD_PWD			"pwd_pwd"
#define OLV_RECO_PARAM_JS_ID			"js_id"		
#define OLV_RECO_PARAM_JS_HISTO			"js_histo"	
#define OLV_RECO_PARAM_JS_PORC			"js_porc"
#define OLV_RECO_PARAM_JS_R_CODE		"js_r_cd"
#define OLV_RECO_PARAM_JS_R_CODE_ERR	"js_r_cd_err"
#define OLV_RECO_PARAM_JS_R_DATA		"js_r_dt"

/**
 *	@file olv_reco.h
 *	Archivo de definiciones y variables de la utilidad de recogida de residuos del programa Olivia.
 */

/**
 * Estructura que contiene los nombres de los campos a leer
 */
typedef struct Campos_dbf_reco
{
	char			campo_uds[OLV_LIMP_MAX_CAMP];
	char			campo_capa[OLV_LIMP_MAX_CAMP];
	char			campo_kgcont[OLV_LIMP_MAX_CAMP];
}Campos_dbf_reco;

/**
 * Enumeración para identificar si es instalación de salida llegada o planta de descarga
 */
enum InstalPlant{
	OLV_INSTAL,
	OLV_PLANT,
};
/**
 *	Clase de definiciones y variables de la utilidad de recogida de residuos del programa Olivia.
 */
class Colv_reco : public Colv_limp
{
public:
	//*************************************************************************************
	//Variables
	Colv_reco_thr			*thr_reco;		///<Instancia del thread de recogida, que hace las operaciones
	Campos_dbf_reco			camps_r;		///<Campos a leer de la dbf
	short					*ptos_vaci;		///<Array de tamaño Namb, donde indica si en ese ámbito va a vaciar o a descargar
	int						*info_carg;		///<Array para guardar la info de carga de los sensores
	int						t_vaci;			///<Tiempo de vaciado de cada contenedor, en segundos
	int						t_descarg;		///<Tiempo de descarga en planta, en segundos
	double					dens_frac;		///<Densidad de la fracción a recoger, en kg/m3
	double					kg_max;			///<Kg máximos de recogida por vehículo en cada ruta
	double					kg_reco_def;	///<Kg por defecto que se recogen en cada contenedor
	double					anch_vehi;		///<Ancho del vehículo, en metros
	double					giro_vehi;		///<Giro mínimo del vehículo, en º
	double					coor_plant[3];	///<Coordenadas de la planta donde va a descargar
	Info_sens				info_sens;		///<Información para la conexión al ws de los sensores

	//*************************************************************************************
	//Funciones
	Colv_reco(COlivia *olv);
	~Colv_reco(void);
	void rellena_campos();
	int pon_config(char *config);
	void inicia_limp();
	BOOL inicia();
	void dame_cost(double ltot, int ia, float *cost, float *cost2);
	void cancela();
	void rellena_campos_sens();
	BOOL lee_campos_sens_ini(char *path);
	BOOL guarda_campos_sens_ini(char *path);
};
#endif