package com.jiayue.ipfcst.calculate.service;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.jiayue.ipfcst.common.data.entity.ElectricField;
import com.jiayue.ipfcst.common.data.entity.PowerStationStatusData;
import com.jiayue.ipfcst.common.data.entity.PowerStationStatusDataOne;

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

public interface IAccuracyPassRateCalculate {
  BigDecimal ZERO = new BigDecimal("0");
  BigDecimal ONE = new BigDecimal("1");
  BigDecimal HUNDRED = new BigDecimal("100");

  /**
   * 计算准确率
   * @param electricField
   */
  void generateData(ElectricField electricField);

  /**
   *  获取计算对比系数
   * @param radio 洗漱
   * @param cap 装机容量
   * @param dr 保留几位小数
   * @return 对比系数
   */
  static BigDecimal compareRadio(BigDecimal radio, BigDecimal cap, int dr) {
    return cap.multiply(radio).setScale(dr, BigDecimal.ROUND_HALF_UP);
  }

  /**
   * 过滤实际功率小于0 的数据
   *
   * @param datas 过滤前的集合
   * @return 过滤后的集合
   */
  static List<PowerStationStatusData> filterData(List<PowerStationStatusData> datas){
    List<PowerStationStatusData> result = new ArrayList<>();
    if(datas!=null &&datas.size()>0){
      float zero = ZERO.floatValue();
      for(PowerStationStatusData p :datas){
        float ableValue = p.getAbleValue().floatValue();
        if(ableValue>=zero){
          result.add(p);
        }
      }
    }
    return result;
  }

  /**
   * 过滤实际功率小于0 的数据
   *
   * @param datas 过滤前的集合
   * @return 过滤后的集合
   */
  static List<PowerStationStatusDataOne> filterDataOne(List<PowerStationStatusDataOne> datas){
    List<PowerStationStatusDataOne> result = new ArrayList<>();
    if(datas!=null &&datas.size()>0){
      float zero = ZERO.floatValue();
      for(PowerStationStatusDataOne p :datas){
        float ableValue = p.getAbleValue().floatValue();
        if(ableValue>=zero){
          result.add(p);
        }
      }
    }
    return result;
  }

  /**
   * 获取查询时间
   * 范围 00:00 - 23:45
   * @return 00:00 至  当前时间15分钟时间节点
   */

  static long[] getQueryTimeSh(){
    long[] result = new long[2];
    long startTime = DateUtil.beginOfDay(DateTime.now()).getTime();
    long nowTime = DateTime.now().getTime();
    long moment15 = 900000L;
    BigDecimal nowTimeBig = new BigDecimal(String.valueOf(nowTime));
    BigDecimal moment15Big = new BigDecimal(String.valueOf(moment15));
    BigDecimal queryTimeBig = nowTimeBig.divideAndRemainder(moment15Big)[0].multiply(moment15Big);
    long endTime = queryTimeBig.longValue();
    result[0] = startTime;
    result[1] = endTime;
    return result;
  }

  /**
   * 获取查询时间
   * 范围 00:15 - 00:00
   * @return  00:15 至  当前时间15分钟时间节点
   */

  static long[] getQueryTime(){
    long[] result = new long[2];
    long nowTime = DateTime.now().getTime();
    long toDayZero = DateUtil.beginOfDay(DateTime.now()).getTime();
    long moment15 = 900000L;
    //获取今日凌晨00:15
    long startTime =toDayZero+moment15;
    BigDecimal nowTimeBig = new BigDecimal(String.valueOf(nowTime));
    BigDecimal moment15Big = new BigDecimal(String.valueOf(moment15));
    BigDecimal queryTimeBig = nowTimeBig.divideAndRemainder(moment15Big)[0].multiply(moment15Big);
    long endTime = queryTimeBig.longValue();
    //当前时间是凌晨 开始时间昨日00:15 今日00:00
    if(queryTimeBig.longValue() == toDayZero){
      startTime =DateUtil.offsetDay(DateUtil.beginOfDay(DateTime.now()), -1).getTime()+moment15;

      endTime =toDayZero;
    }
    result[0] = startTime;
    result[1] = endTime;
    return result;
  }

}
