package com.hrs.service;

import com.hrs.model.entity.Order;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**   
* Copyright: Copyright (c) 2026 chinasofti
* 
* @ClassName: OrderService.java
* @Description: 订单业务逻辑接口
*
* @version: v1.0.0
* @author: 黄红
* @date: 2026年4月13日 上午10:01:16 
*
* Modification History:
* Date         Author          Version            Description
*---------------------------------------------------------*
* 2026年4月13日     黄红          v1.0.0               新建文件
*/
public interface OrderService {

    /**
     * 创建订单
     */
    CreateOrderResult createOrder(Long tenantId, Long houseId, Date startDate, Date endDate);

    /**
     * 模拟支付
     */
    boolean payOrder(Long orderId, Long tenantId);

    /**
     * 取消订单（租客）
     */
    boolean cancelOrder(Long orderId, Long tenantId);

    /**
     * 获取租客订单列表
     */
    List<Order> getTenantOrders(Long tenantId);

    /**
     * 获取房东订单列表
     */
    List<Order> getLandlordOrders(Long landlordId);

    /**
     * 获取所有订单（管理员）
     */
    List<Order> getAllOrders();

    /**
     * 获取订单详情
     */
    Order getOrderDetail(Long orderId);

    /**
     * 统计租客订单数量
     */
    int getTenantOrderCount(Long tenantId);

    /**
     * 统计所有订单数量
     */
    int getAllOrderCount();

    /**
     * 创建订单结果类
     */
    class CreateOrderResult {
        private boolean success;
        private String message;
        private Long orderId;
        private String orderNo;
        private BigDecimal totalRent;

        public boolean isSuccess() { return success; }
        public void setSuccess(boolean success) { this.success = success; }
        public String getMessage() { return message; }
        public void setMessage(String message) { this.message = message; }
        public Long getOrderId() { return orderId; }
        public void setOrderId(Long orderId) { this.orderId = orderId; }
        public String getOrderNo() { return orderNo; }
        public void setOrderNo(String orderNo) { this.orderNo = orderNo; }
        public BigDecimal getTotalRent() { return totalRent; }
        public void setTotalRent(BigDecimal totalRent) { this.totalRent = totalRent; }
    }
}
