package com.ylx.massage.service;

import com.ylx.massage.domain.TOrder;

/**
 * 订单消息通知服务接口
 * <p>
 * 提供订单生命周期各阶段的消息通知功能，包括：
 * 待接单提醒、已接单通知、完成通知、取消通知
 * </p>
 *
 * @author ylx
 * @version 1.0
 * @since 2024
 */
public interface OrderNotificationService {

    /**
     * 订单已接单通知（用户侧）
     * <p>
     * 当技师接单后，向用户发送已接单确认消息。
     * 包含订单号、项目名称、预约时间、用户电话、服务地址等信息。
     * </p>
     *
     * @param order 订单信息
     */
    void sendReceivedNotification(TOrder order);

    /**
     * 订单完成通知（用户侧）
     * <p>
     * 当订单服务完成后，向用户发送订单完成通知。
     * 包含订单号、项目名称、完成时间等信息。
     * </p>
     *
     * @param order 订单信息
     */
    void sendCompletedNotification(TOrder order);

    /**
     * 订单取消通知（用户侧）
     * <p>
     * 当订单被取消后，向用户发送订单取消通知。
     * 包含订单号、取消原因、项目名称等信息。
     * </p>
     *
     * @param order 订单信息
     */
    void sendCancelledNotification(TOrder order);

    /**
     * 订单待接单提醒（技师侧）
     * <p>
     * 当订单支付成功后，向技师发送待接单提醒消息。
     * 包含订单号、项目名称、预约时间、用户电话、服务地址等信息。
     * </p>
     *
     * @param order 订单信息
     */
    void sendPendingRemindNotification(TOrder order);

    /**
     * 订单已接单通知（技师侧）
     * <p>
     * 当技师确认接单后，向技师发送接单成功的通知消息。
     * 包含订单号、项目名称、用户姓名、联系电话、服务地址、下单时间等信息。
     * </p>
     *
     * @param order 订单信息
     */
    void sendTechnicianReceivedNotification(TOrder order);

    /**
     * 订单取消通知（技师侧）
     * <p>
     * 当订单被用户取消后，向技师发送订单取消通知消息。
     * 包含订单号、取消原因、项目名称等信息。
     * </p>
     *
     * @param order 订单信息
     */
    void sendTechnicianCancelledNotification(TOrder order);
}
