package com.gxwebsoft.shop.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.List;

/**
 * 订单相关配置属性
 *
 * @author 科技小王子
 * @since 2025-01-26
 */
@Data
@Component
@ConfigurationProperties(prefix = "shop.order")
public class OrderConfigProperties {

    /**
     * 测试账号配置
     */
    private TestAccount testAccount = new TestAccount();

    /**
     * 租户特殊规则配置
     */
    private List<TenantRule> tenantRules;

    /**
     * 默认订单配置
     */
    private DefaultConfig defaultConfig = new DefaultConfig();

    @Data
    public static class TestAccount {
        /**
         * 测试手机号列表
         */
        private List<String> phoneNumbers;

        /**
         * 测试支付金额
         */
        private BigDecimal testPayAmount = new BigDecimal("0.01");

        /**
         * 是否启用测试模式
         */
        private boolean enabled = false;
    }

    @Data
    public static class TenantRule {
        /**
         * 租户ID
         */
        private Integer tenantId;

        /**
         * 租户名称
         */
        private String tenantName;

        /**
         * 最小金额限制
         */
        private BigDecimal minAmount;

        /**
         * 金额限制提示信息
         */
        private String minAmountMessage;

        /**
         * 是否启用
         */
        private boolean enabled = true;
    }

    @Data
    public static class DefaultConfig {

        /**
         * 默认标题
         */
        private String defaultTitle = "订单标题";

        /**
         * 默认备注
         */
        private String defaultComments = "暂无";

        /**
         * 最小订单金额
         */
        private BigDecimal minOrderAmount = BigDecimal.ZERO;

        /**
         * 订单超时时间（分钟）
         */
        private Integer orderTimeoutMinutes = 30;
    }

    /**
     * 检查是否为测试账号
     */
    public boolean isTestAccount(String phone) {
        return testAccount.isEnabled() &&
               testAccount.getPhoneNumbers() != null &&
               testAccount.getPhoneNumbers().contains(phone);
    }

    /**
     * 获取租户规则
     */
    public TenantRule getTenantRule(Integer tenantId) {
        if (tenantRules == null) {
            return null;
        }
        return tenantRules.stream()
                .filter(rule -> rule.isEnabled() && rule.getTenantId().equals(tenantId))
                .findFirst()
                .orElse(null);
    }
}
