-- CreateTable
CREATE TABLE `business_rule_settings` (
    `id` VARCHAR(191) NOT NULL DEFAULT 'global',
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,
    `startingMinimumBuy` DECIMAL(30, 10) NOT NULL DEFAULT 10,
    `incrementStep` DECIMAL(30, 10) NOT NULL DEFAULT 1,
    `incrementType` VARCHAR(191) NOT NULL DEFAULT 'FIXED',
    `currency` VARCHAR(191) NOT NULL DEFAULT 'USD',
    `maxDailyOrderCount` INTEGER NULL,
    `maxDailyOrderAmount` DECIMAL(30, 10) NULL,
    `maxMonthlyOrderAmount` DECIMAL(30, 10) NULL,
    `isActive` BOOLEAN NOT NULL DEFAULT true,
    `metadata` JSON NULL,

    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `purchase_tiers` (
    `id` VARCHAR(191) NOT NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,
    `name` VARCHAR(191) NOT NULL,
    `minAmount` DECIMAL(30, 10) NOT NULL,
    `maxAmount` DECIMAL(30, 10) NULL,
    `bonusPercentage` DECIMAL(8, 6) NOT NULL DEFAULT 0,
    `commissionRate` DECIMAL(8, 6) NULL,
    `priority` INTEGER NOT NULL DEFAULT 0,
    `isActive` BOOLEAN NOT NULL DEFAULT true,
    `description` VARCHAR(191) NULL,
    `metadata` JSON NULL,

    INDEX `purchase_tiers_isActive_priority_idx`(`isActive`, `priority`),
    INDEX `purchase_tiers_minAmount_maxAmount_idx`(`minAmount`, `maxAmount`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `business_commission_rules` (
    `id` VARCHAR(191) NOT NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,
    `tierId` VARCHAR(191) NULL,
    `name` VARCHAR(191) NOT NULL,
    `ruleType` VARCHAR(191) NOT NULL,
    `percentage` DECIMAL(8, 6) NOT NULL,
    `flatFee` DECIMAL(30, 10) NULL,
    `minAmount` DECIMAL(30, 10) NULL,
    `maxAmount` DECIMAL(30, 10) NULL,
    `currency` VARCHAR(191) NOT NULL DEFAULT 'USD',
    `isActive` BOOLEAN NOT NULL DEFAULT true,
    `description` VARCHAR(191) NULL,
    `metadata` JSON NULL,

    INDEX `business_commission_rules_tierId_idx`(`tierId`),
    INDEX `business_commission_rules_ruleType_isActive_idx`(`ruleType`, `isActive`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `business_referral_rules` (
    `id` VARCHAR(191) NOT NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,
    `tierId` VARCHAR(191) NULL,
    `name` VARCHAR(191) NOT NULL,
    `rewardType` VARCHAR(191) NOT NULL,
    `rewardValue` DECIMAL(30, 10) NOT NULL,
    `currency` VARCHAR(191) NOT NULL DEFAULT 'USD',
    `minReferredAmount` DECIMAL(30, 10) NULL,
    `maxReward` DECIMAL(30, 10) NULL,
    `isActive` BOOLEAN NOT NULL DEFAULT true,
    `description` VARCHAR(191) NULL,
    `metadata` JSON NULL,

    INDEX `business_referral_rules_tierId_idx`(`tierId`),
    INDEX `business_referral_rules_isActive_idx`(`isActive`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `business_bonus_rules` (
    `id` VARCHAR(191) NOT NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,
    `name` VARCHAR(191) NOT NULL,
    `bonusType` VARCHAR(191) NOT NULL,
    `amount` DECIMAL(30, 10) NOT NULL,
    `currency` VARCHAR(191) NOT NULL DEFAULT 'USD',
    `isActive` BOOLEAN NOT NULL DEFAULT true,
    `maxClaims` INTEGER NULL,
    `claimedCount` INTEGER NOT NULL DEFAULT 0,
    `validFrom` DATETIME(3) NULL,
    `validUntil` DATETIME(3) NULL,
    `description` VARCHAR(191) NULL,
    `metadata` JSON NULL,

    INDEX `business_bonus_rules_bonusType_isActive_idx`(`bonusType`, `isActive`),
    INDEX `business_bonus_rules_validFrom_validUntil_idx`(`validFrom`, `validUntil`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `business_rule_history` (
    `id` VARCHAR(191) NOT NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `entityType` VARCHAR(191) NOT NULL,
    `entityId` VARCHAR(191) NOT NULL,
    `action` VARCHAR(191) NOT NULL,
    `oldValues` JSON NULL,
    `newValues` JSON NULL,
    `actorId` VARCHAR(191) NULL,
    `ipAddress` VARCHAR(191) NULL,
    `userAgent` VARCHAR(191) NULL,

    INDEX `business_rule_history_entityType_entityId_idx`(`entityType`, `entityId`),
    INDEX `business_rule_history_createdAt_idx`(`createdAt`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `user_rule_assignments` (
    `id` VARCHAR(191) NOT NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,
    `userId` VARCHAR(191) NOT NULL,
    `ruleVersion` VARCHAR(191) NOT NULL,
    `ruleType` VARCHAR(191) NOT NULL,
    `tierId` VARCHAR(191) NULL,
    `isActive` BOOLEAN NOT NULL DEFAULT true,
    `assignedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `assignedBy` VARCHAR(191) NULL,
    `metadata` JSON NULL,

    INDEX `user_rule_assignments_userId_ruleType_idx`(`userId`, `ruleType`),
    INDEX `user_rule_assignments_tierId_idx`(`tierId`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `user_order_limits` (
    `id` VARCHAR(191) NOT NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,
    `userId` VARCHAR(191) NOT NULL,
    `dailyLimit` DECIMAL(30, 10) NOT NULL,
    `monthlyLimit` DECIMAL(30, 10) NOT NULL,
    `dailyUsed` DECIMAL(30, 10) NOT NULL DEFAULT 0,
    `monthlyUsed` DECIMAL(30, 10) NOT NULL DEFAULT 0,
    `currency` VARCHAR(191) NOT NULL DEFAULT 'USD',
    `isActive` BOOLEAN NOT NULL DEFAULT true,
    `metadata` JSON NULL,

    UNIQUE INDEX `user_order_limits_userId_key`(`userId`),
    INDEX `user_order_limits_userId_idx`(`userId`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `referral_commission_config` (
    `id` VARCHAR(191) NOT NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,
    `name` VARCHAR(191) NOT NULL,
    `description` VARCHAR(191) NULL,
    `amount` DECIMAL(30, 10) NOT NULL DEFAULT 0.1,
    `currency` VARCHAR(191) NOT NULL DEFAULT 'USDT',
    `isEnabled` BOOLEAN NOT NULL DEFAULT true,
    `minReferredAmount` DECIMAL(30, 10) NULL,
    `maxReward` DECIMAL(30, 10) NULL,
    `rewardType` VARCHAR(191) NOT NULL DEFAULT 'FIXED',
    `minPurchaseRange` DECIMAL(30, 10) NOT NULL DEFAULT 1,
    `maxPurchaseRange` DECIMAL(30, 10) NULL,
    `appliesToTierId` VARCHAR(191) NULL,
    `priority` INTEGER NOT NULL DEFAULT 0,
    `isActive` BOOLEAN NOT NULL DEFAULT true,
    `metadata` JSON NULL,

    INDEX `referral_commission_config_isActive_idx`(`isActive`),
    INDEX `referral_commission_config_appliesToTierId_idx`(`appliesToTierId`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `commission_range_config` (
    `id` VARCHAR(191) NOT NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,
    `name` VARCHAR(191) NOT NULL,
    `description` VARCHAR(191) NULL,
    `minAmount` DECIMAL(30, 10) NOT NULL,
    `maxAmount` DECIMAL(30, 10) NULL,
    `commissionType` VARCHAR(191) NOT NULL DEFAULT 'PERCENTAGE',
    `percentage` DECIMAL(8, 6) NULL,
    `flatFee` DECIMAL(30, 10) NULL,
    `currency` VARCHAR(191) NOT NULL DEFAULT 'USDT',
    `isActive` BOOLEAN NOT NULL DEFAULT true,
    `priority` INTEGER NOT NULL DEFAULT 0,
    `metadata` JSON NULL,

    INDEX `commission_range_config_isActive_minAmount_idx`(`isActive`, `minAmount`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

