package com.base.core.config;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 成像卫星访问计算约束条件
 * 
 * @author dhs
 *
 */
@Component
@Data
public class ImageLimitation {

	@Value("${access.compute.limit.sar.QWERT13A-1minSunElevationAngle}")
	private double minSun;
	@Value("${access.compute.limit.sar.QWERT13A-1MAXROLL}")
	private double maxRoll;
	@Value("${access.compute.limit.sar.QWERT13A-1MINROLL}")
	private double minRoll;
	/**
	 * 轨道倾角
	 */
	@Value("${access.compute.limit.sar.QWERT13A-1Inclination}")
	private double inclination;
	
	/**
	 * 轨道高度
	 */
	@Value("${access.compute.limit.sar.QWERT13A-1Altitude}")
	private double altitude;
	
	/**
	 * 传感器类型，0:CCD, 1:SRA, 2:可见光, 3:红外, 4:高光谱, 5:可见光/红外/高光谱三合一
	 */
	@Value("${access.compute.limit.sar.QWERT13A-1SensorType}")
	private int sensorType;
	@Value("${access.compute.limit.sar.QWERT13A-1PayloadType}")
	private String payloadType;


	/**
	 * 访问时刻向后跳下小的长度，太阳同步可见光6A-1,6,10:22小时，太阳同步SAR5,7:10小时，太阳同步宽幅可见光9:1.5小时
	 * timeStep与卫星侧摆能力和传感器幅宽有关，上述数值是考虑现有型号卫星能力得到
	 */
	@Value("${access.compute.limit.sar.QWERT13A-1TimeStep}")
	private double timeStep;
	
	/**
	 * 轨道计算步长，单位：秒
	 */
	@Value("${access.compute.limit.sar.QWERT13A-1stepLength}")
	private int stepLength;
	
	/**
	 * 访问时刻向后跳点的长度，根据timeStep, stepLength计算
	 */
	private long stepSpan = (long) (timeStep * 60 * 60 / stepLength);
	
	/**
	 * 星下点距离目标多远可以开始计算的门限，单位：弧度
	 */
	private double maxDistance =  (long) (Math.tan((maxRoll + maxRoll / 10.0) * Math.PI / 180.0) * altitude);;
	
	/**
	 * 因相机光轴相对卫星本体坐标系Z轴沿飞行方向安装偏差导致的俯仰计算和访问计算偏置时间，沿飞行方向正向偏置为正，单位：秒
	 */
	@Value("${access.compute.limit.sar.QWERT13A-1xSpan}")
	private long xSpan;
	
	/**
	 * 因相机光轴相对卫星本体坐标系Z轴沿飞行方向安装偏差导致的俯仰角计算偏置角度，沿飞行方向前为正，单位：角度
	 */
	@Value("${access.compute.limit.sar.QWERT13A-1xDrift}")
	private double xDrift;
	
	/**
	 * 因相机光轴相对卫星本体坐标系Z轴沿飞行方向安装偏差导致的滚动角计算偏置角度，沿飞行方向右为正，单位：角度
	 */
	@Value("${access.compute.limit.sar.QWERT13A-1yDrift}")
	private double yDrift;
	@Value("${access.compute.limit.sar.satName_13}")
	private String satName;
	
	/**
	 * 升降轨成像标识，0：降轨成像，1：升轨成像，2：成像与升降轨无关
	 */
	@Value("${access.compute.limit.sar.QWERT13A-1ImageSign}")
	private int imageSign;
	
	/**
	 * 判断能否访问的纬度条件
	 */
	@Value("${access.compute.limit.sar.QWERT13A-1Latlimate}")
	private double latlimate;

	/**
	 * 电子星最大观测时长
	 */
	@Value("${access.compute.limit.electron.max_ele_duration}")
	private int maxEleDuration;

}
