package com.zm.order.tool.server.stream;

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

/**
 * SQL路由编排
 *
 * <p>
 *
 * </p>
 *
 * @author nianchang
 * @date 2023/03/09 2:27 下午
 */
public enum SQLRouteDefinition {

    /* 操作订单 start....... */
    /**
     * 新增订单
     */
    ORDER_INSERT("com.zm.order.biz.dao.OrderDao.insert", SQLCategory.ORDERS),

    /**
     * 更新订单信息
     */
    ORDER_UPDATE("com.zm.order.biz.dao.OrderDao.update", SQLCategory.ORDERS),

    /**
     * 更新订单用户id（同路由）
     */
    ORDER_UPDATE_USER("com.zm.order.biz.dao.OrderDao.updateUserId", SQLCategory.ORDERS),

    /**
     * 创建订单
     */
    ORDER_CREATE("com.zm.order.biz.dao.OrderDao.create", SQLCategory.ORDERS),
    /* 操作订单 end....... */

    /* 查询订单 start....... */
    /**
     * 查询订单详情
     */
    ORDER_SELECT_BY_ORDER_NO("com.zm.order.biz.dao.OrderDao.selectByOrderNo", SQLCategory.ORDERS),

    /**
     * 查询订单列表
     */
    ORDER_SELECT_LIST("com.zm.order.biz.dao.OrderDao.selectList", SQLCategory.ORDERS),

    /**
     * 查询订单列表
     *
     * 返回精简的订单信息
     */
    ORDER_SELECT_CONCISE_LIST("com.zm.order.biz.dao.OrderDao.selectConciseList", SQLCategory.ORDERS),

    /**
     * 查询单个订单
     */
    ORDER_SELECT_ONE("com.zm.order.biz.dao.OrderDao.selectOne", SQLCategory.ORDERS),

    /**
     * 查询订单是否存在
     */
    ORDER_SELECT_ORDER_EXIST("com.zm.order.biz.dao.OrderDao.selectOrderExist", SQLCategory.ORDERS),

    /**
     * 查询剪短的订单信息
     */
    ORDER_SELECT_SHORT_LIST("com.zm.order.biz.dao.OrderDao.selectShortList", SQLCategory.ORDERS),

    /**
     * 扫描订单列表
     */
    ORDER_SCAN_LIST("com.zm.order.biz.dao.OrderDao.scanList", SQLCategory.ORDERS),

    /**
     * 批量更新订单信息
     */
    ORDER_BATCH_UPDATE("com.zm.order.biz.dao.OrderDao.batchUpdateOrder", SQLCategory.ORDERS),

    /**
     * 查询订单状态
     */
    ORDER_SELECT_STATUS("com.zm.order.biz.dao.OrderDao.selectStatus", SQLCategory.ORDERS),

    /**
     * 查询订单
     */
    ORDER_SELECT_STORE("com.zm.order.biz.dao.OrderDao.selectStoreByOne", SQLCategory.ORDERS),
    /* 查询订单 end....... */

    /* 新增订单支付明细 start....... */
    /**
     * 新增支付明细（单条）
     */
    PAY_DETAIL_INSERT("com.zm.order.biz.dao.OrderPayDetailsDao.insert", SQLCategory.ORDER_PAY_DETAILS),

    /**
     * 新增支付明细（批量）
     */
    PAY_DETAIL_INSERT_LIST("com.zm.order.biz.dao.OrderPayDetailsDao.insertList", SQLCategory.ORDER_PAY_DETAILS),

    /**
     * 修改支付明细
     */
    PAY_DETAIL_UPDATE("com.zm.order.biz.dao.OrderPayDetailsDao.update", SQLCategory.ORDER_PAY_DETAILS),
    /* 新增订单支付明细 end....... */

    /* 查询订单支付明细 start....... */
    /**
     * 查询支付明细
     */
    PAY_DETAIL_SELECT_BY_NO("com.zm.order.biz.dao.OrderPayDetailsDao.selectByOrderNo", SQLCategory.ORDER_PAY_DETAILS),

    /**
     * 查询支付明细列表
     */
    PAY_DETAIL_SELECT_LIST("com.zm.order.biz.dao.OrderPayDetailsDao.selectList", SQLCategory.ORDER_PAY_DETAILS),
    /* 查询订单支付明细 end....... */

    /* 新增退款单 start....... */
    /**
     * 新增退款单
     */
    REFUND_INSERT("com.zm.order.biz.dao.RefundDao.insert", SQLCategory.REFUNDS),

    /**
     * 修改退款单
     */
    REFUND_UPDATE("com.zm.order.biz.dao.RefundDao.update", SQLCategory.REFUNDS),
    /* 新增退款单 end....... */

    /* 查询退款单 start....... */
    /**
     * 查询退款单
     */
    REFUND_SELECT_BY_REFUND_NO("com.zm.order.biz.dao.RefundDao.selectByRefundNo", SQLCategory.REFUNDS),

    /**
     * 查询退款单列表
     */
    REFUND_SELECT_LIST("com.zm.order.biz.dao.RefundDao.selectList", SQLCategory.REFUNDS),

    /**
     * 查询退款单
     */
    REFUND_SELECT_BY_ORDER_NO("com.zm.order.biz.dao.RefundDao.selectByOrderNo", SQLCategory.REFUNDS),
    /* 查询退款单 end....... */

    /* 新增退款明细 start....... */
    /**
     * 新增退款明细
     */
    REFUND_DETAIL_INSERT("com.zm.order.biz.dao.RefundDetailDao.insert", SQLCategory.REFUND_DETAILS),

    /**
     * 新增退款明细(批量)
     */
    REFUND_DETAIL_INSERT_LIST("com.zm.order.biz.dao.RefundDetailDao.insertList", SQLCategory.REFUND_DETAILS),

    /**
     * 更新退款明细
     */
    REFUND_DETAIL_UPDATE("com.zm.order.biz.dao.RefundDetailDao.update", SQLCategory.REFUND_DETAILS),
    /* 新增退款明细 end....... */

    /* 查询退款明细 start....... */
    /**
     * 查询退款明细
     */
    REFUND_DETAIL_SELECT_BY_NO("com.zm.order.biz.dao.RefundDetailDao.selectByRefundNo", SQLCategory.REFUND_DETAILS),

    /**
     * 查询退款明细
     */
    REFUND_DETAIL_SELECT_LIST("com.zm.order.biz.dao.RefundDetailDao.selectList", SQLCategory.REFUND_DETAILS),
    /* 查询退款明细 end....... */
    ;

    /**
     * 持久层方法名称
     */
    private String id;

    /**
     * code
     */
    private SQLCategory category;

    public String getId() { return id; }

    public SQLCategory getCategory() {
        return category;
    }

    private static Map<String, SQLRouteDefinition> MAP = new HashMap<>(values().length);

    SQLRouteDefinition(String id, SQLCategory category) {
        this.id = id;
        this.category = category;
    }

    public static SQLRouteDefinition get(String id) { return MAP.get(id); }

    static { for (SQLRouteDefinition each : values()) { MAP.put(each.id, each); } }
}
