package com.prolog.eis.utils;

import com.prolog.framework.core.exception.BizException;

/**
 * @author zhanghan
 */
public class AngleConversionAB {

    private static final String A = "A";

    private static final String B = "B";

    /**
     * 通过传入货架和站台角度得到当前货架朝向
     * 
     * @param palletDirection 货架角度
     * @param stationDirection 站台角度
     * @return 货架面
     */
    public static int getDirection(int palletDirection, int stationDirection) {
        int subtract = stationDirection - palletDirection;
        int abs = Math.abs(subtract);
        switch (abs) {
        case 0:
            // B面
            return 2;
        case 180:
            // A面
            return 1;
        default:
            // 暂时没有第三种情况，如果出现了0则代表角度异常
            return 0;
        }
    }

    /**
     * 通过传入货架和站台角度得到当前货架朝向
     * 
     * @param palletDirection 货架角度
     * @param stationDirection 站台角度
     * @return 货架面
     */
    public static String getDirectionStr(int palletDirection, int stationDirection) {
        int subtract = stationDirection - palletDirection;
        int abs = Math.abs(subtract);
        switch (abs) {
        case 0:
            // B面
            return AngleConversionAB.B;
        case 180:
            // A面
            return AngleConversionAB.A;
        default:
            // 暂时没有第三种情况，如果出现了0则代表角度异常
            return "";
        }
    }

    /**
     * 通过传入货架作业的面和站台角度得到 货架的角度
     * 
     * @param palletDirection A B面
     * @param stationDirection 站台角度
     * @return 货架角度
     */
    public static int getDirectionStr(String palletDirection, int stationDirection) {
        if (!AngleConversionAB.A.equals(palletDirection) && !AngleConversionAB.B.equals(palletDirection)) {
            throw new BizException(String.format("货架面参数异常,%s", palletDirection));
        }

        int direction = 0;
        if (AngleConversionAB.A.equals(palletDirection)) {
            direction = 180;
        }

        int subtract = stationDirection - direction;
        if (subtract < 0) {
            return subtract + 360;
        } else {
            return subtract;
        }
    }

    public static String getBackPlane(String plane) {
        switch (plane) {
        case AngleConversionAB.A:
            // B面
            return AngleConversionAB.B;
        case AngleConversionAB.B:
            // B面
            return AngleConversionAB.A;
        default:
            // 暂时没有第三种情况，如果出现了则返回空字符串
            return "";
        }
    }
}