package com.jiayue.ipfcst.client.domain.entity;


import com.jiayue.ipfcst.client.protocol2file.EquipmentType;
import lombok.Data;

import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

/**
 * 气象站
 * 环境监测仪数据抽象实体
 *
 * @author zzy
 * @version 1.0
 * @since 2019/8/2 9:27
 */
@Data
public class WeatherStationStatusData extends BaseStatusData {


	private static final Map<String, Field> numberFields = new HashMap<>();

	static {
		Field[] fields = WeatherStationStatusData.class.getDeclaredFields();
		for (Field f : fields) {
			if (f.getAnnotatedType().getType().equals(BigDecimal.class)) {
				f.setAccessible(true);
				numberFields.put(f.getName(), f);
			}
		}
	}

	public WeatherStationStatusData(){
		setEquipmentType(EquipmentType.WEATHER_STATION);
	}

	/**
	 * 总辐射（W/㎡）
	 */
	private BigDecimal globalR = new BigDecimal(-99);

	/**
	 * 直接辐射（W/㎡）
	 */
	private BigDecimal directR = new BigDecimal(-99);

	/**
	 * 散射辐射（W/㎡）
	 */
	private BigDecimal diffuseR = new BigDecimal(-99);

	/**
	 * 斜面辐射（W/㎡）
	 */
	private BigDecimal obliqueR = new BigDecimal(-99);

	/**
	 * 环境温度（℃）
	 */
	private BigDecimal airT = new BigDecimal(-99);

	/**
	 * 气压（KPa）
	 */
	private BigDecimal p = new BigDecimal(-99);

	/**
	 * 湿度（%）
	 */
	private BigDecimal rh = new BigDecimal(-99);


	/**
	 * 光伏电池板温度（℃）
	 */
	private BigDecimal cellT = new BigDecimal(-99);

	/**
	 * 风速（m/s）
	 */
	private BigDecimal ws = new BigDecimal(-99);

	/**
	 * 风向（°）
	 */
	private BigDecimal wd = new BigDecimal(-99);


	/**
	 * 日照小时数
	 */
	private BigDecimal hourDA = new BigDecimal(-99);

	/**
	 * 总辐射日累计（MJ/㎡）
	 */
	private BigDecimal globalRDA = new BigDecimal(-99);

	/**
	 * 直接辐射日累计（MJ/㎡）
	 */
	private BigDecimal directRDA = new BigDecimal(-99);

	/**
	 * 散射辐射日累计（MJ/㎡）  1KW·H=3.6MJ
	 */
	private BigDecimal diffuseRDA = new BigDecimal(-99);

	/**
	 * 斜面辐射日累计（MJ/㎡）
	 */
	private BigDecimal obliqueRDA = new BigDecimal(-99);


	public BigDecimal getNumberValueByFiled(String filedName) throws IllegalAccessException {
		if (numberFields.containsKey(filedName)) {
			return (BigDecimal) numberFields.get(filedName).get(this);
		} else {
			return BigDecimal.valueOf(-99);
		}
	}


	public void putNumberValueByFiled(String filedName,BigDecimal val) throws IllegalAccessException {
		if (numberFields.containsKey(filedName)) {
			numberFields.get(filedName).set(this,val);
		}
	}

}
