package com.jsowell.pile.service;

import com.jsowell.pile.domain.PileBillingRelation;
import com.jsowell.pile.domain.PileBillingTemplate;
import com.jsowell.pile.dto.CreateOrUpdateBillingTemplateDTO;
import com.jsowell.pile.dto.ImportBillingTemplateDTO;
import com.jsowell.pile.vo.uniapp.BillingPriceVO;
import com.jsowell.pile.vo.uniapp.CurrentTimePriceDetails;
import com.jsowell.pile.vo.web.BillingTemplateVO;
import com.jsowell.pile.vo.web.EchoBillingTemplateVO;

import java.util.List;

/**
 * 计费模板Service接口
 *
 * @author jsowell
 * @date 2022-09-20
 */
public interface IPileBillingTemplateService {
	/**
	 * 查询计费模板
	 *
	 * @param id 计费模板主键
	 * @return 计费模板
	 */
	public PileBillingTemplate selectPileBillingTemplateById(Long id);

	/**
	 * 查询计费模板列表
	 *
	 * @param pileBillingTemplate 计费模板
	 * @return 计费模板集合
	 */
	public List<PileBillingTemplate> selectPileBillingTemplateList(PileBillingTemplate pileBillingTemplate);

	/**
	 * 新增计费模板
	 *
	 * @param pileBillingTemplate 计费模板
	 * @return 结果
	 */
	public int insertPileBillingTemplate(PileBillingTemplate pileBillingTemplate);

	/**
	 * 修改计费模板
	 *
	 * @param pileBillingTemplate 计费模板
	 * @return 结果
	 */
	public int updatePileBillingTemplate(PileBillingTemplate pileBillingTemplate);

	/**
	 * 批量删除计费模板
	 *
	 * @param ids 需要删除的计费模板主键集合
	 * @return 结果
	 */
	public int deletePileBillingTemplateByIds(Long[] ids);

	/**
	 * 删除计费模板信息
	 *
	 * @param id 计费模板主键
	 * @return 结果
	 */
	public int deletePileBillingTemplateById(Long id);

	/**
	 * 新增计费模板
	 *
	 * @param dto 参数
	 * @return 计费模板id
	 */
	void createBillingTemplate(CreateOrUpdateBillingTemplateDTO dto);

	/**
	 * 查询公共计费模板
	 *
	 * @return
	 */
	List<BillingTemplateVO> queryPublicBillingTemplateList();

	/**
	 * 查询站点计费模板
	 *
	 * @param stationId 站点id
	 * @return
	 */
	List<BillingTemplateVO> queryStationBillingTemplateList(String stationId);

	/**
	 * 查询站点计费模板
	 *
	 * @param stationId 站点id
	 * @return
	 */
	List<BillingTemplateVO> queryStationBillingTemplateListForUniApp(String stationId);

	/**
	 * 查询正在使用中的计费模板
	 * @param stationId 站点id
	 * @return
	 */
	BillingTemplateVO queryUsedBillingTemplate(String stationId);

	/**
	 * 查询计费价格详情
	 * @param stationId 站点id
	 * @return
	 */
	List<BillingPriceVO> queryBillingPrice(String stationId);

	/**
	 * 通过桩sn号查询计费模板信息
	 *
	 * @param pileSn 桩sn
	 * @return 计费模板编号
	 */
	BillingTemplateVO selectBillingTemplateDetailByPileSn(String pileSn);

	/**
	 * 站点导入计费模板
	 *
	 * @param dto
	 * @return
	 */
	boolean stationImportBillingTemplate(ImportBillingTemplateDTO dto);

	byte[] generateBillingTemplateMsgBody(String pileSn, BillingTemplateVO billingTemplateVO);

	/**
	 * 根据计费模板id查询计费模板信息
	 *
	 * @param templateId 计费模板id
	 * @return 计费模板信息
	 */
	BillingTemplateVO selectBillingTemplateByTemplateId(String templateId);

	/**
	 * 保存计费模板和桩关系
	 *
	 * @param relationList
	 */
	void insertPileBillingRelation(List<PileBillingRelation> relationList);

	/**
	 * 修改计费模板
	 *
	 * @param dto
	 */
	void updateBillingTemplate(CreateOrUpdateBillingTemplateDTO dto);

	EchoBillingTemplateVO queryPileBillingTemplateById(Long id);

	/**
	 * 通过站点id查询当前时间的收费详情
	 */
	CurrentTimePriceDetails getCurrentTimePriceDetails(String stationId);
}
