package com.zc.business.utils;
import lombok.Getter;

public class WeatherTrafficProposeUtil {

    // 定义天气条件的等级
    @Getter
    public enum WeatherCondition {
        RAIN_LEVEL_1(3, "1"),
        RAIN_LEVEL_2(2, "1"),
        RAIN_LEVEL_3(1, "1"),
        RAIN_LEVEL_4(0, "1"),
        FOG_LEVEL_1(3, "5,11,12"),
        FOG_LEVEL_2(2, "5,11,12"),
        FOG_LEVEL_3(1, "5,11,12"),
        FOG_LEVEL_4(0, "5,11,12"),
        SNOW_LEVEL_1(3, "2,9,10,13"),
        SNOW_LEVEL_2(2, "2,9,10,13"),
        SNOW_LEVEL_3(1, "2,9,10,13"),
        SNOW_LEVEL_4(0, "2,9,10,13");

        private final int level;
        private final String description;

        WeatherCondition(int level, String description) {
            this.level = level;
            this.description = description;
        }

        public static WeatherCondition fromLevelAndDescription(int level, String description) {
            for (WeatherCondition condition : WeatherCondition.values()) {
                if (condition.getLevel() == level && condition.getDescription().contains(description)) {
                    return condition;
                }
            }
            throw new IllegalArgumentException("No matching WeatherCondition found for level: " + level + " and description: " + description);
        }
    }

    // 获取限速建议
    public static int getSpeedLimit(WeatherCondition condition) {
        switch (condition) {
            case RAIN_LEVEL_4:
            case FOG_LEVEL_4:
            case SNOW_LEVEL_4:
                return 80; // 四级
            case RAIN_LEVEL_3:
            case FOG_LEVEL_3:
            case SNOW_LEVEL_3:
                return 60; // 三级
            case RAIN_LEVEL_2:
            case FOG_LEVEL_2:
            case SNOW_LEVEL_2:
                return 40; // 二级
            case RAIN_LEVEL_1:
            case FOG_LEVEL_1:
            case SNOW_LEVEL_1:
                return 20; // 一级(带队通行)
            default:
                throw new IllegalArgumentException("Unknown weather condition: " + condition);
        }
    }

    // 获取流量控制建议
    public static String getTrafficControlAdvice(WeatherCondition condition) {
        switch (condition) {
            case RAIN_LEVEL_4:
            case FOG_LEVEL_4:
            case SNOW_LEVEL_4:
            case RAIN_LEVEL_3:
            case FOG_LEVEL_3:
            case SNOW_LEVEL_3:
            case RAIN_LEVEL_2:
            case FOG_LEVEL_2:
            case SNOW_LEVEL_2:
                return "建议局部封闭、间断放行;";
            case RAIN_LEVEL_1:
            case FOG_LEVEL_1:
            case SNOW_LEVEL_1:
                return "建议全线封闭收费站、必要时可带队通行的控制措施。全线封闭时,正在高速公路通行的车辆应以不大于 20km/h 的速度就近驶出高速公路或驶入服务区。带队通行时,应保障交通有序通行;";
            default:
                throw new IllegalArgumentException("Unknown weather condition: " + condition);
        }
    }

    // 获取车型控制建议
    public static String getVehicleControlAdvice(WeatherCondition condition) {
        switch (condition) {
            case RAIN_LEVEL_4:
            case FOG_LEVEL_4:
            case SNOW_LEVEL_4:
                return "所有车型均可通行。";
            case RAIN_LEVEL_3:
            case FOG_LEVEL_3:
                return "禁止“两客一危”车辆通行。";
            case RAIN_LEVEL_2:
            case FOG_LEVEL_2:
                return "禁止七座以上(不含七座)客车、危险品运输车辆和黄牌货车通行。";
            case RAIN_LEVEL_1:
            case FOG_LEVEL_1:
            case SNOW_LEVEL_1:
                return "全线封闭;必要时可带队通行。";
            case SNOW_LEVEL_2:
                return "仅间隔放行黄牌货车。";
            case SNOW_LEVEL_3:
                return "禁止七座以上(不含七座)客车、危险品运输车辆通行。";
            default:
                throw new IllegalArgumentException("Unknown weather condition: " + condition);
        }
    }

    public static String  content(int warningLevelStringNumber, String earlyWarningTypeStringNumber){
        WeatherCondition condition = WeatherCondition.fromLevelAndDescription(warningLevelStringNumber, earlyWarningTypeStringNumber);
        System.out.println("Weather Condition: " + condition.name() + ", Level: " + condition.getLevel() + ", Description: " + condition.getDescription());
        return "建议速度为"+getSpeedLimit(condition) + " km/h ;\n"  + getTrafficControlAdvice(condition) + "\n"  + getVehicleControlAdvice(condition);
    }

    public static void main(String[] args) {
        int warningLevelStringNumber = 3;
        String  earlyWarningTypeStringNumber= "1";
        try {
            WeatherCondition condition = WeatherCondition.fromLevelAndDescription(warningLevelStringNumber, earlyWarningTypeStringNumber);
            System.out.println("Weather Condition: " + condition.name() + ", Level: " + condition.getLevel() + ", Description: " + condition.getDescription());

            int speedLimit = getSpeedLimit(condition);
            String trafficAdvice = getTrafficControlAdvice(condition);
            String vehicleAdvice = getVehicleControlAdvice(condition);

            System.out.println("限速建议: " + speedLimit + " km/h");
            System.out.println("流量控制建议: " + trafficAdvice);
            System.out.println("车型控制建议: " + vehicleAdvice);
        } catch (IllegalArgumentException e) {
            System.err.println(e.getMessage());
        }
    }
}