package thyyxxk.webserver.utils;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;

import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * @Description:
 * @Author:lihong
 * @Date: 2023/1/12
 */
public class CommonUtil {
    /**
     * @description:计算医保支付方式
     * @author: lihong
     * @date: 2023/1/12 9:44
     * @param: insuplcAdmdvs 参保地
     * @param: medType 医疗类别
     * @param: insurtype 险种类型
     * @param: setlTime 结算时间
     * @return: java.lang.Integer
     **/
    public static Integer calcHiPaymtd (String insuplcAdmdvs, String medType, String insurtype, Date setlTime){
        //// 长沙 4301 株洲4302   湘潭 4303   衡阳4304  郴州4310(郴州先不算) 省本级 439900
        //长沙市、县、浏阳、宁乡、望城、内五区的职工、居民的普通住院、外伤住院结算清单是按DRG传， 4
        //普通住院 2101 外伤住院 22
        List<String> medTypes = Arrays.asList("2101", "22");
        //职工 310  居民 390
        List<String> insurtypes = Arrays.asList("310", "390");
        try {
            if(setlTime.getTime() < DateUtil.parse("2023-01-01","yyyy-MM-dd").getTime()){
                return 3;
            }
            //单病种
            if (medType.equals("2102")) {
                return  2;
            }
            if(matchInsuplcAdmdvs(insuplcAdmdvs) && insurtypes.contains(insurtype) && medTypes.contains(medType)){
                return 4;
            }
        }catch (Exception e){
            return 1;
        }
        // 其他都是按项目 1
        return 1;
    }

    private static boolean matchInsuplcAdmdvs(String insuplcAdmdvs){
        //省本级
        if("439900".equals(insuplcAdmdvs)){
            return true;
        }
        //长沙 4301 株洲4302   湘潭 4303   衡阳4304
        String[] drgCityCode =  {"4301","4302","4303","4304"};
        for(String code:drgCityCode){
            if(insuplcAdmdvs.startsWith(code)){
                return true;
            }
        }
        return false;
    }


    public static String toInStringSql(List<String> list) {
        StringBuilder str = new StringBuilder();
        list.forEach(item ->{
            str.append("'");
            str.append(item);
            str.append("'");
            str.append(",");
        });
        String s = str.toString();
        return s.substring(0,s.length()-1);
    }
    /**
     * @description:对bean去前后空格
     * @author: lihong
     * @date: 2023/4/27 17:12
     * @param: list
     **/
    public static<T> void BeanTrim(List<T> list){
        if(CollUtil.isNotEmpty(list)){
            list.stream().forEach(item ->{
                BeanUtil.trimStrFields(item);
            });
        }
    }

    /**
     * @description:将对象字段类型为字符串,为空''的值 设置为 null
     * @author: lihong
     * @date: 2023/9/26 14:33
     * @param: object
     * @param: clazz
     **/
    public static void objectEmpty2Null(Object object,Class clazz){
        Field[] fields = ReflectUtil.getFields(clazz);
        for(Field field : fields){
            Object fieldValue = ReflectUtil.getFieldValue(object, field);
            if(fieldValue instanceof String){
                String value = (String) fieldValue;
                if(StrUtil.isBlank(value)){
                    ReflectUtil.setFieldValue(object,field,null);
                }
            }
        }
    }
    /**
     * @description:生成药单号
     * @author: lihong
     * @date: 2023/9/27 16:12
     * @param: pageNo
     **/
    public static Integer getSerPagNo(Integer pageNo) {
        String date = cn.hutool.core.date.DateUtil.formatDate(new Date());
       return Integer.valueOf(date.substring(2,4)+date.substring(5, 7)+date.substring(8)+pageNo);
    }
}
