package com.xhpc.order.service;

import com.xhpc.common.core.domain.R;
import com.xhpc.common.core.web.domain.AjaxResult;
import com.xhpc.common.domain.XhpcRate;
import com.xhpc.order.domain.XhpcChargeOrder;
import com.xhpc.order.domain.XhpcOrderRedisRecord;

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

/**
 * @author yuyang
 * @date 2021/8/4 9:54
 */
public interface IXhpcChargeOrderService {

    /**
     * 判断实时订单
     *
     * @param userId
     * @return
     */
    AjaxResult getHistotyChargeOrderMessage(Long userId);


    /**
     * 实时订单
     *
     * @param userId
     * @return
     */
    Map<String, Object> getOrderMessage(Long userId);
    /**
     * 异常订单
     * @param userId
     * @return
     */
    List<Map<String, Object>> getHistotyChargeOrderStatusList(Long userId);

    /**
     * 启动充电
     * @param userId
     * @param serialNumber   终端编码
     * @return
     */
    AjaxResult startUp(Long userId,String serialNumber,Integer type);

    /**
     * 停止充电
     * @param userId
     * @param serialNumber   终端编码
     * @return
     */
    AjaxResult stopUp(Long userId,String serialNumber,Long chargingOrderId);


    /**
     * 获取充电订单数据
     *
     * @param serialNumber 订单编号
     * @return
     */
    XhpcChargeOrder getSerialNumberMessage(String serialNumber);


    /**
     * 判断用户是第几次充电
     * @param userId
     * @return
     */
    int getCount(Long userId,Long chargeOrderId);

    /**
     * 活动
     * @return
     */
    Map<String,Object> getPromotion();

    /**
     * 修改充电订单
     *
     * @param xhpcChargeOrder
     * @return
     */
    void updateXhpcChargeOrder(XhpcChargeOrder xhpcChargeOrder);


    /**
     * appUserId 查询用户信息
     * @param userId
     * @return
     */
    Map<String,Object> getUserMessage(Long userId);

    /**
     * 修改余额
     * @param userId
     * @param balance
     * @return
     */
    int updateUserBalance(Long userId, BigDecimal balance);

    /**
     * 获取运营商信息
     * @param chargingStationId
     * @return
     */
    Map<String,Object> getOperatorMessage( Long chargingStationId);


    /**
     * 添加redis数据到数据库
     */
    void addXhpcOrderRedisRecord(XhpcOrderRedisRecord xhpcOrderRedisRecord);

    /**
     * 添加流水
     * @param userId              用户id
     * @param amount              流水金额
     * @param remainingSum        余额
     * @param chargeOrderId       充电订单id
     * @param type                类型（1充值 2退款 3充电）
     * @param date                时间
     * @return
     */
    int addUserAccountStatement(Long userId, BigDecimal amount, BigDecimal remainingSum, Long chargeOrderId, Integer type,
                                Date date);


    XhpcChargeOrder getChargingOrderId(Long chargingOrderId);

    /**
     * 获取费率
     */
    List<XhpcRate> getRateModelId(Long rateModelId);


    /**
     * 获取电桩信息
     * @param terminalId
     * @return
     */
    Map<String,Object> getXhpcChargingPile(Long terminalId);

    /**
     * 获取一次订单
     * @param status    -1准备充电 0开始充电 1自动结算，2异常，3平台结算
     * @param source    0C端用户 1流量用户
     * @return
     */
    List<XhpcChargeOrder> getXhpcChargeOrderStatus(Integer status,Integer source);

    R startUpBy3rd(String internetSerialNumber, String driverId, Integer chargingAmt, String plateNum, Integer status, String connectorId);

    /**
     * 标记异常大于创建4小时，标记为异常
     */
    void updateStatus();
}