package com.smppw.common.pojo.dto.calc;

import com.smppw.common.pojo.dto.CompoundRet;
import com.smppw.common.pojo.dto.DateValue;
import com.smppw.common.pojo.enums.Frequency;
import com.smppw.common.pojo.enums.Indicator;
import com.smppw.common.pojo.enums.TrendType;
import lombok.Data;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Data
public class IndicatorCalcReqPropertyDto {

    /**
     * 标的ID
     */
    private String secId;

    /**
     * 基准ID
     */
    private String benchmarkId;

    /**
     * 指数ID的数组
     */
    private List<String> indexIdList = new ArrayList<>();

    /**
     * 开始日期, 结束日期, timeRange
     */
    private IndicatorCalcTimeRangeDto indicatorCalcTimeRangeDto;

    /**
     * 所有标的的净值序列的map  key-标的ID  value=净值序列
     */
    private Map<String,List<DateValue>> allNavMap;

    /**
     * 无风险收益Id
     */
    private String riskOfFreeId;


    private Double riskOfFreeValue;

    /**
     * 策略的收益, key-日期, value-收益
     */
    private Map<String, CompoundRet> strategyDateRetMap;

    /**
     * 需要计算的指标集合
     */
    private List<Indicator> indicatorList = new ArrayList<>();

    /**
     * 需要计算的指标集合
     */
    private List<Indicator> ariIndicatorList = new ArrayList<>();

    /**
     * 需要计算的指标集合
     */
    private List<Indicator> geoIndicatorList = new ArrayList<>();

    /**
     * 用于收益类指标计算
     */
    private Frequency frequency;

    private Frequency defaultFrequency;

    /**
     * 是否年化  true-年化, false-不年化
     */
    private boolean ifAnnualize;

    /**
     * 需要获取的数据类型 - 用于走势
     */
    private List<TrendType> trendTypeList;

    /**
     * 固定收益-来自走势图的
     */
    private BigDecimal fixedIncome;

    /**
     * 零点值-来自走势图的
     */
    private BigDecimal initValue;

    /**
     * 是否需要算出超额几何收益
     */
    private Boolean needExtraGeoRet = false;

    /**
     * 是否需要算出收益
     */
    private Boolean needRet = false;

    /**
     * 是否计算指数的指标, 默认不计算指数的指标
     */
    private Boolean calcIndexRetIndicatorValue = false;

    /**
     *
     */
    private boolean ifConvertPerformanceConsistencyWord = false;

    private int leastRetNum = 6;
}
