package com.ruoyi.app.flashdelivery.service;

import static com.ruoyi.system.domain.flash.FlashDeliveryStatus.*;

/**
 * 闪送履约状态机。
 * 正常路径固定为待接单、已接单、已取件、已送达、已完成；已完成和已取消均为终态。
 */
public final class FlashDeliveryStateMachine {
    private FlashDeliveryStateMachine() { }

    public static boolean canTransition(String from, String to) {
        return WAITING_ACCEPTANCE.equals(from) && ACCEPTED.equals(to)
                || ACCEPTED.equals(from) && PICKED_UP.equals(to)
                || PICKED_UP.equals(from) && DELIVERED.equals(to)
                || DELIVERED.equals(from) && COMPLETED.equals(to)
                || canAdminCancel(from) && CANCELLED.equals(to);
    }

    public static boolean canUserCancel(String status) {
        // 用户只能在实际取件前取消；取件后的异常由平台介入处理。
        return WAITING_ACCEPTANCE.equals(status) || ACCEPTED.equals(status);
    }

    public static boolean canAdminCancel(String status) {
        // 平台可取消任何非终态订单，用于异常履约人工收口。
        return !COMPLETED.equals(status) && !CANCELLED.equals(status);
    }
}
