import com.engine.attendance.enums.ClockPointEnum;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TestRecordData {
    public static void main(String[] args) {
        List<Map<String,Map<String,Object>>> clcokInTimeData = Lists.newArrayList();
        Map<String,Map<String,Object>> map1 = new HashMap(){{
            put("2023-11-30 09:00|0|4",new HashMap(){{
                put("signtime","08:38:00");
                put("signdate","2023-11-30");
            }});

        }};
        Map<String,Map<String,Object>> map2 = new HashMap(){{
            put("2023-11-30 10:00|1|5|0",new HashMap(){{
                put("signtime","10:29:00");
                put("signdate","2023-11-30");
            }});
        }};
        Map<String,Map<String,Object>> map3 = new HashMap(){{
            put("2023-11-30 11:00|0|4|0",null);
        }};
        Map<String,Map<String,Object>> map4 = new HashMap(){{
            put("2023-11-30 11:00|1|5|0",new HashMap(){{
                put("signtime","11:38:00");
                put("signdate","2023-11-30");
            }});
        }};
        Map<String,Map<String,Object>> map5 = new HashMap(){{
            put("2023-11-30 18:00|0|5|0",new HashMap(){{
                put("signtime","18:29:00");
                put("signdate","2023-11-30");
            }});
        }};
        clcokInTimeData.add(map1);
        clcokInTimeData.add(map2);
        clcokInTimeData.add(map3);
        clcokInTimeData.add(map4);
        clcokInTimeData.add(map5);
        System.out.println(getNeedRecordClockInTime(clcokInTimeData));
    }

    public static Map<String, Object> getNeedRecordClockInTime(List<Map<String,Map<String,Object>>> clcokInTimeData) {
        Map<String, Object> resultMap = Maps.newHashMap();
        int inIndex = 1;
        int outIndex = 1;
        int jcCloumns = 8;
        for (Map<String,Map<String,Object>> clcokInTimeMap : clcokInTimeData){
            //卡点
            String point = "";
            //当天打卡数据
            Map<String,Object> clcokInTime = null;
            for (Map.Entry<String,Map<String,Object>> entry :clcokInTimeMap.entrySet()){
                point = entry.getKey();
                clcokInTime = entry.getValue();
            }
            //需要计算的班次打卡时间点
            String pointTime = point.split("\\|")[0];
            //start：开始打卡时间点，end：结束打卡时间点
            String pointType = point.split("\\|")[1];
            //empty:漏卡，equal:打卡时间和班次时间相等，before：打卡时间在班次时间之前，after：打卡时间在班次时间之后
            String timeType = point.split("\\|")[2];


            if (ClockPointEnum.START.getKey().equals(pointType)){
                //开始时间打卡
                String key = "j"+inIndex;
                if (!ClockPointEnum.EMPTY.getKey().equals(timeType) && clcokInTime != null){
                    String value = "'"+clcokInTime.get("signtime")+"'";
                    resultMap.put(key,value);
                }else {
                    resultMap.put(key,"NULL");
                }
                inIndex++;
            }else if (ClockPointEnum.END.getKey().equals(pointType)){
                //结束时间打卡
                String key = "c"+outIndex;
                if (!ClockPointEnum.EMPTY.getKey().equals(timeType) && clcokInTime != null){
                    String value = "'"+clcokInTime.get("signtime")+"'";
                    resultMap.put(key,value);
                }else {
                    resultMap.put(key,"NULL");
                }
                outIndex++;
            }

        }
        for (int i=inIndex;i<jcCloumns;i++){
            String key = "j"+i;
            resultMap.put(key,"NULL");
        }
        for (int i=outIndex;i<jcCloumns;i++){
            String key = "c"+i;
            resultMap.put(key,"NULL");
        }
        return resultMap;
    }

}
