-- =====================================================================
-- Wallet microservice schema (migration 001)
-- Schema is provided by the user and MUST NOT be renamed.
-- =====================================================================

-- جدول اصلی کیف پول کاربران
CREATE TABLE IF NOT EXISTS `user_wallets` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `user_id` BIGINT(20) NOT NULL,
  `status` ENUM('active', 'locked', 'suspended') NOT NULL DEFAULT 'active',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- جدول موجودی دارایی‌های مختلف هر کیف پول
CREATE TABLE IF NOT EXISTS `user_balances` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `wallet_id` INT(11) NOT NULL,
  `asset_type` VARCHAR(32) NOT NULL COMMENT 'IRR, SILVER_GRAM, etc.',
  `balance` DECIMAL(18, 4) NOT NULL DEFAULT 0.0000 COMMENT 'مقدار موجودی (برای نقره با اعشار گرم، برای ریال با دقت ریال)',
  `locked_balance` DECIMAL(18, 4) NOT NULL DEFAULT 0.0000 COMMENT 'موجودی قفل‌شده در سفارشات باز یا در حال پردازش',
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_wallet_asset` (`wallet_id`, `asset_type`),
  CONSTRAINT `fk_balance_wallet` FOREIGN KEY (`wallet_id`) REFERENCES `user_wallets` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- جدول دفتر کل تراکنش‌ها (Ledger) - بسیار حیاتی برای عدم مغایرت
CREATE TABLE IF NOT EXISTS `wallet_transactions` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `wallet_id` INT(11) NOT NULL,
  `asset_type` VARCHAR(32) NOT NULL,
  `type` ENUM('deposit', 'withdraw', 'transfer', 'buy', 'sell', 'fee') NOT NULL COMMENT 'نوع تراکنش',
  `amount` DECIMAL(18, 4) NOT NULL COMMENT 'مقدار تغییر (همیشه مثبت؛ جهت با type/description مشخص می‌شود)',
  `balance_before` DECIMAL(18, 4) NOT NULL,
  `balance_after` DECIMAL(18, 4) NOT NULL,
  `reference_id` VARCHAR(100) DEFAULT NULL COMMENT 'شناسه سفارش، کد پیگیری بانکی یا فاکتور مربوطه',
  `description` TEXT DEFAULT NULL,
  `status` ENUM('pending', 'completed', 'failed', 'reversed') NOT NULL DEFAULT 'completed',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_wallet_id` (`wallet_id`),
  KEY `idx_reference` (`reference_id`),
  CONSTRAINT `fk_tx_wallet` FOREIGN KEY (`wallet_id`) REFERENCES `user_wallets` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
