package cn.cecep.talroad.vo.query.analysis;

import cn.cecep.talroad.common.core.domain.query.PageQuery;
import cn.cecep.talroad.common.core.utils.StringUtils;
import cn.cecep.talroad.util.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Arrays;
import java.util.Date;

@Data
public class SRaLowMonitoringQuery extends PageQuery {
    /**
     * 企业名称
     */
    @TableField(value = "factory_name")
    @ApiModelProperty(value="企业名称")
    private String factoryName;

    /**
     * 行业类别名称(多个使用'、'拼接)
     */
    @TableField(value = "industry_category_name")
    @ApiModelProperty(value="行业类别名称(多个使用'、'拼接)")
    private String industryCategoryName;

    /**
     * 行业类别编码(多个使用'、'拼接)
     */
    @TableField(value = "industry_category_code")
    @ApiModelProperty(value="行业类别编码(多个使用'、'拼接)")
    private String industryCategoryCode;

    /**
     * 所在区县名称
     */
    @TableField(value = "district_name")
    @ApiModelProperty(value="所在区县名称")
    private String districtName;

    /**
     * 所在区县编码
     */
    @TableField(value = "district_code")
    @ApiModelProperty(value="所在区县编码")
    private String districtCode;

    /**
     * 监测点名称
     */
    @TableField(value = "moitor_name")
    @ApiModelProperty(value="监测点名称")
    private String moitorName;

    /**
     * 监测项目
     */
    @TableField(value = "monitoring_class")
    @ApiModelProperty(value="监测项目")
    private String monitoringClass;

    /**
     * 监测日期
     */
    @TableField(value = "monitor_time")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value="监测日期开始")
    private Date monitorTimeStart;
    @ApiModelProperty(value="监测日期结束")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date monitorTimeEnd;

    public static <T> QueryWrapper<T> createGasWrapper(SRaLowMonitoringQuery query,  Class<T> obj)  {
        QueryWrapper<T> wrapper;
        try {
            wrapper = new QueryWrapper<>(obj.newInstance());
        } catch (InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(e);
        }
        wrapper.like(StringUtils.isNotEmpty(query.getFactoryName()), "factory_name", query.getFactoryName());

        if(StringUtils.isNotEmpty(query.getIndustryCategoryName())) {
            wrapper.in("industry_category_name", Arrays.asList(query.getIndustryCategoryName().split(",")));
        }
        if(StringUtils.isNotEmpty(query.getIndustryCategoryCode())) {
            wrapper.in("industry_category_code",  Arrays.asList(query.getIndustryCategoryCode().split(",")));
        }

        wrapper.eq(StringUtils.isNotEmpty(query.getDistrictName()), "district_name", query.getDistrictName());
        wrapper.eq(StringUtils.isNotEmpty(query.getDistrictCode()), "district_code", query.getDistrictCode());
        wrapper.like(StringUtils.isNotEmpty(query.getMoitorName()), "moitor_name", query.getMoitorName());
        wrapper.like(StringUtils.isNotEmpty(query.getMonitoringClass()), "monitoring_class", query.getMonitoringClass());
        if(ObjectUtil.isNotEmpty(query.getMonitorTimeStart())) {
            wrapper.ge(ObjectUtil.isNotEmpty(query.getMonitorTimeStart()), "monitor_time",
                    DateUtil.parseTime(DateUtil.formatDate(query.getMonitorTimeStart(), "yyyy-MM-dd 00:00:00")));
        }
        if(ObjectUtil.isNotEmpty(query.getMonitorTimeEnd())) {
            wrapper.le(ObjectUtil.isNotEmpty(query.getMonitorTimeEnd()), "monitor_time",
                    DateUtil.parseTime(DateUtil.formatDate(query.getMonitorTimeEnd(), "yyyy-MM-dd 23:59:59")));
        }
        return wrapper;
    }
}
