package com.zsElectric.boot.business.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zsElectric.boot.business.model.query.StationInfoQuery;
import com.zsElectric.boot.business.model.vo.AppletConnectorListVO;
import com.zsElectric.boot.business.model.vo.AppletStationDetailVO;
import com.zsElectric.boot.business.model.vo.AppletStationPriceListVO;
import com.zsElectric.boot.business.model.vo.BannerInfoVO;
import com.zsElectric.boot.business.model.vo.StationInfoMapVO;
import com.zsElectric.boot.business.model.vo.StationInfoVO;
import com.zsElectric.boot.business.model.vo.applet.AppChargingCostVO;
import com.zsElectric.boot.business.model.vo.applet.AppStationSearchVO;
import com.zsElectric.boot.business.model.vo.applet.AppletConnectorDetailVO;

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

public interface AppletHomeService {

    /**
     * 用户端分页查询站点信息
     * */
    IPage<StationInfoVO> getStationInfoPage(StationInfoQuery queryParams);

    /**
     * 首页地图模式-获取站点列表（按距离排序）
     * */
    List<StationInfoMapVO> getStationInfoMapList(BigDecimal longitude, BigDecimal latitude);

    /**
     * 获取启用状态的Banner列表
     * @return Banner列表
     */
    List<BannerInfoVO> getBannerList(Integer location);

    /**
     * 获取电站详情
     * @param stationId 站点ID
     * @param longitude 经度（用于计算距离）
     * @param latitude 纬度（用于计算距离）
     * @return 电站详情
     */
    AppletStationDetailVO getStationDetail(Long stationId, BigDecimal longitude, BigDecimal latitude);

    /**
     * 获取电站充电终端列表
     * @param stationId 站点ID
     * @return 充电终端列表
     */
    AppletConnectorListVO getConnectorList(Long stationId);

    /**
     * 获取电站价格列表
     * @param stationId 站点ID
     * @return 价格列表
     */
    AppletStationPriceListVO getStationPriceList(Long stationId);

    /***
     * 获取用户当前充电订单费用信息
     * 根据当前登录用户ID查询正在充电中的订单
     * @return 实时充电费用信息，如果没有正在充电的订单则返回null
     * */
    AppChargingCostVO getCurrentChargingCost(String orderNo);

    /**
     * 搜索充电站
     * 根据站点名称和地址进行模糊查询
     *
     * @param keyword 搜索关键词（站点名称或地址）
     * @param longitude 经度（用于计算距离，可为null）
     * @param latitude 纬度（用于计算距离，可为null）
     * @return 搜索结果列表
     */
    List<AppStationSearchVO> searchStations(String keyword, BigDecimal longitude, BigDecimal latitude);

    /**
     * 获取充电设备接口详情
     * @return 设备接口详情
     */
    AppletConnectorDetailVO getConnectorDetail(String connectorCode);

    /**
     * 计算当前用户可用充电金额
     * 公式：
     * 1. 可充电度数 = (用户余额 - 安全价) / (电费 + 服务费 + 运营费 + 增值费)
     * 2. 可用充电金额 = 可充电度数 × (电费 + 服务费)
     * 说明：
     * - 先按总单价计算能充多少度电，再换算为基础费用金额
     * - 这样确保度数计算时已包含所有费用，避免重复扣费
     *
     * @param connectorCode 充电设备接口
     * @return 可用充电金额（元）
     */
    BigDecimal calculateAvailableChargingAmount(String connectorCode);

}
