package com.sptg.ad.biz.service;

import com.baomidou.mybatisplus.enums.SqlLike;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.sptg.ad.api.entity.DeviceAdvert;
import com.sptg.common.core.beans.PageBean;
import org.springframework.util.StringUtils;

import java.util.Date;

/**
 *            
 *                
 * description:
 */
public interface DeviceAdvertService extends IService<DeviceAdvert> {

    /**
     * 查询设备内的广告数量
     * @param serialNumber 设备序列号
     * @param taskType 任务类型：{ 1：人脸广告，2：闲时广告 }
     * @return 广告数量
     */
    default int selectDeviceAdvertCount(String serialNumber,Integer taskType){
        Wrapper<DeviceAdvert> wrapper = new EntityWrapper<>();
        wrapper.eq("serial_number",serialNumber);
        wrapper.eq("task_type",taskType);
        wrapper.eq("status",0);
//        Date now = new Date();
//        wrapper.gt("begin_time",now);
//        wrapper.lt("end_time",now);
        return this.selectCount(wrapper);
    }

    /**
     * 分页查询设备中的广告列表
     * @param pageBean 查询条件
     * @return Page<DeviceAdvert>
     */
    default Page<DeviceAdvert> pagingQuery(PageBean<DeviceAdvert,DeviceAdvert> pageBean){
        DeviceAdvert dto = pageBean.getDto();
        Wrapper<DeviceAdvert> wrapper = new EntityWrapper<>();
        //  根据设备序列号查询
        if (StringUtils.hasText(dto.getSerialNumber())){
            wrapper.eq("serial_number",dto.getSerialNumber());
        }
        //  查询人脸广告或闲时广告
        if (null != dto.getTaskType()){
            wrapper.eq("task_type",dto.getTaskType());
        }
        //  根据广告类型查询
        if (StringUtils.hasText(dto.getAdType())){
            wrapper.eq("ad_type",dto.getAdType());
        }
        //  根据广告名称模糊查询
        if (StringUtils.hasText(dto.getAdName())){
            wrapper.like("ad_name",dto.getAdName(), SqlLike.RIGHT);
        }
        //  根据发布机构查询
        if (StringUtils.hasText(dto.getOrgName())){
            wrapper.like("org_name",dto.getOrgName(), SqlLike.RIGHT);
        }
        //  根据发布时间查询
        if (StringUtils.hasText(dto.getPublishTime())){
            wrapper.and("( DATE_FORMAT( create_time,'%Y-%m-%d') = {0} )",dto.getPublishTime());
        }
        //  根据状态查询
        if (null != dto.getStatus()){
            switch (dto.getStatus()){
                //  已删除
                case -1:
                    wrapper.eq("status",dto.getStatus());
                    break;
                //  待投放
                case 0:
                    wrapper.and("( status <> -1 AND NOW() < begin_time )");
                    break;
                //  投放中
                case 1:
                    wrapper.and("( status <> -1 AND NOW() > begin_time AND NOW() < end_time  )");
                    break;
                //  投放结束
                case 2:
                    wrapper.and("( status <> -1 AND NOW() > end_time )");
                    break;
                default: break;
            }

        }
        return this.selectPage(pageBean,wrapper);
    }

}
