package cn.com.countrygarden.bi.main.service.mediaResource;

import cn.com.countrygarden.bi.main.dto.mediaResource.MediaCycleDto;
import cn.com.countrygarden.bi.main.model.mediaResource.Regional;

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

public interface MediaCommonService {
    /**
     * 校验资源使用情况
     * 是否在两个时间范围之间
     * @param param
     * @return
     */
    Map<String, Object> checkBill(MediaCycleDto param);

    /**
     * * 电梯广告 月单价=合同金额/投放天数/30天/媒体数量
     * <p>
     * 道闸广告 月单价=合同金额/投放天数/30天/媒体数量
     * <p>
     * 道旗广告 月单价=合同金额/投放天数/30天/媒体数量
     * <p>
     * 大牌广告 月单价=合同金额/投放天数/30天/大牌面积，大牌面积=宽*高
     * <p>
     * 固定灯箱广告 月单价=合同金额/投放天数/30天/灯箱面积，灯箱面积=宽*高
     * <p>
     * 滚动灯箱广告 月单价=合同金额/投放天数/30天/灯箱广告位数量
     * <p>
     * 其他广告 月单价=合同金额/投放天数/30天/媒体数量
     *
     * @param dto
     * @param mediaType
     * @param billAmount
     */
    BigDecimal calculateUnitAmount(Date startDate, Date endDate,
                                   int mediaType, int mediaForm, BigDecimal billAmount,
                                   int mediaWidth, int mediaHeight);

    /**
     * 计算bill金额
     * @param startDate
     * @param endDate
     * @param mediaType
     * @param mediaForm
     * @param unitAmount
     * @param mediaWidth
     * @param mediaHeight
     * @return
     */
    BigDecimal calculateBillAmount(Date startDate, Date endDate,
                                   int mediaType, int mediaForm, BigDecimal unitAmount,
                                   int mediaWidth, int mediaHeight);

    /**
     * 获取订单状态字典
     * @return
     */
    @Deprecated
    List<Map<String, String>> getOrderStatusType();

    /**
     * 是否媒体资源总部角色
     * @return
     */
    boolean isAdminRole();

    /**
     * 是否媒体资源总部角色
     * @return
     */
    boolean isAreaRole();

    /**
     * 相差多少天(算上了结束的那一天时间)
     * @param startDate yy-MM-dd
     * @param endDate yy-MM-dd
     * @return
     */
    // todo 保证格式为yy-MM-dd
    int dayDiff(Date startDate, Date endDate);

   /**
    * 查询用户管辖区域
    * @param userCode
    */
    List<Regional> findCompany(String userCode);

}
