-- ==============================================================================
-- SmartAuth Identity & Verification Platform — Complete MySQL Database Schema
-- Compatible with: cPanel MySQL / phpMyAdmin / MySQL 5.7+ / 8.0+ / MariaDB
-- Database: `jprjehlj_smartauth` / `smartauth`
-- ==============================================================================

SET FOREIGN_KEY_CHECKS = 0;

-- ------------------------------------------------------------------------------
-- Table structure for `User`
-- ------------------------------------------------------------------------------
DROP TABLE IF EXISTS `User`;
CREATE TABLE `User` (
  `id` VARCHAR(191) NOT NULL,
  `userCode` VARCHAR(191) NOT NULL,
  `email` VARCHAR(191) NOT NULL,
  `name` VARCHAR(191) NOT NULL,
  `phone` VARCHAR(191) NULL,
  `address` TEXT NULL,
  `nin` VARCHAR(191) NULL,
  `accountType` VARCHAR(191) NOT NULL DEFAULT 'INDIVIDUAL',
  `company` VARCHAR(191) NULL,
  `orgName` VARCHAR(191) NULL,
  `orgRcNumber` VARCHAR(191) NULL,
  `orgAddress` TEXT NULL,
  `orgPhone` VARCHAR(191) NULL,
  `orgEmail` VARCHAR(191) NULL,
  `passwordHash` VARCHAR(191) NOT NULL,
  `role` VARCHAR(191) NOT NULL DEFAULT 'STANDARD_USER',
  `status` VARCHAR(191) NOT NULL DEFAULT 'ACTIVE',
  `avatarUrl` TEXT NULL,
  `adminPermissions` TEXT NULL,
  `teamOwnerId` VARCHAR(191) NULL,
  `memberPermissions` TEXT NULL,
  `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  `updatedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  PRIMARY KEY (`id`),
  UNIQUE INDEX `User_userCode_key` (`userCode`),
  UNIQUE INDEX `User_email_key` (`email`),
  INDEX `User_userCode_idx` (`userCode`),
  INDEX `User_email_idx` (`email`),
  INDEX `User_role_idx` (`role`),
  INDEX `User_teamOwnerId_idx` (`teamOwnerId`),
  CONSTRAINT `User_teamOwnerId_fkey` FOREIGN KEY (`teamOwnerId`) REFERENCES `User` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------------------------
-- Table structure for `Wallet`
-- ------------------------------------------------------------------------------
DROP TABLE IF EXISTS `Wallet`;
CREATE TABLE `Wallet` (
  `id` VARCHAR(191) NOT NULL,
  `userId` VARCHAR(191) NOT NULL,
  `unitsBalance` DOUBLE NOT NULL DEFAULT 1000,
  `totalUnitsPurchased` DOUBLE NOT NULL DEFAULT 1000,
  `totalUnitsUsed` DOUBLE NOT NULL DEFAULT 0,
  `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  `updatedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  PRIMARY KEY (`id`),
  UNIQUE INDEX `Wallet_userId_key` (`userId`),
  INDEX `Wallet_userId_idx` (`userId`),
  CONSTRAINT `Wallet_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------------------------
-- Table structure for `Transaction`
-- ------------------------------------------------------------------------------
DROP TABLE IF EXISTS `Transaction`;
CREATE TABLE `Transaction` (
  `id` VARCHAR(191) NOT NULL,
  `reference` VARCHAR(191) NOT NULL,
  `walletId` VARCHAR(191) NOT NULL,
  `userId` VARCHAR(191) NOT NULL,
  `units` DOUBLE NOT NULL,
  `type` VARCHAR(191) NOT NULL,
  `description` VARCHAR(191) NOT NULL,
  `unitsAfter` DOUBLE NOT NULL,
  `status` VARCHAR(191) NOT NULL DEFAULT 'SUCCESS',
  `metadata` TEXT NULL,
  `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  PRIMARY KEY (`id`),
  UNIQUE INDEX `Transaction_reference_key` (`reference`),
  INDEX `Transaction_userId_idx` (`userId`),
  INDEX `Transaction_reference_idx` (`reference`),
  CONSTRAINT `Transaction_walletId_fkey` FOREIGN KEY (`walletId`) REFERENCES `Wallet` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `Transaction_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------------------------
-- Table structure for `VerificationRequest`
-- ------------------------------------------------------------------------------
DROP TABLE IF EXISTS `VerificationRequest`;
CREATE TABLE `VerificationRequest` (
  `id` VARCHAR(191) NOT NULL,
  `requestId` VARCHAR(191) NOT NULL,
  `userId` VARCHAR(191) NOT NULL,
  `verificationType` VARCHAR(191) NOT NULL,
  `status` VARCHAR(191) NOT NULL,
  `mode` VARCHAR(191) NOT NULL DEFAULT 'SANDBOX',
  `provider` VARCHAR(191) NOT NULL DEFAULT 'MockVerificationProvider',
  `requestPayload` TEXT NULL,
  `responseData` TEXT NULL,
  `errorMessage` TEXT NULL,
  `latencyMs` INT NOT NULL DEFAULT 0,
  `unitsCharged` DOUBLE NOT NULL DEFAULT 0,
  `ipAddress` VARCHAR(191) NULL,
  `userAgent` TEXT NULL,
  `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  PRIMARY KEY (`id`),
  UNIQUE INDEX `VerificationRequest_requestId_key` (`requestId`),
  INDEX `VerificationRequest_userId_idx` (`userId`),
  INDEX `VerificationRequest_requestId_idx` (`requestId`),
  INDEX `VerificationRequest_status_idx` (`status`),
  CONSTRAINT `VerificationRequest_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------------------------
-- Table structure for `ApiKey`
-- ------------------------------------------------------------------------------
DROP TABLE IF EXISTS `ApiKey`;
CREATE TABLE `ApiKey` (
  `id` VARCHAR(191) NOT NULL,
  `name` VARCHAR(191) NOT NULL,
  `keyPrefix` VARCHAR(191) NOT NULL,
  `keyHash` VARCHAR(191) NOT NULL,
  `environment` VARCHAR(191) NOT NULL DEFAULT 'SANDBOX',
  `status` VARCHAR(191) NOT NULL DEFAULT 'ACTIVE',
  `lastUsedAt` DATETIME(3) NULL,
  `expiresAt` DATETIME(3) NULL,
  `userId` VARCHAR(191) NOT NULL,
  `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  `updatedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  PRIMARY KEY (`id`),
  UNIQUE INDEX `ApiKey_keyHash_key` (`keyHash`),
  INDEX `ApiKey_userId_idx` (`userId`),
  INDEX `ApiKey_keyHash_idx` (`keyHash`),
  CONSTRAINT `ApiKey_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------------------------
-- Table structure for `ApiAccessRequest`
-- ------------------------------------------------------------------------------
DROP TABLE IF EXISTS `ApiAccessRequest`;
CREATE TABLE `ApiAccessRequest` (
  `id` VARCHAR(191) NOT NULL,
  `userId` VARCHAR(191) NOT NULL,
  `businessName` VARCHAR(191) NULL,
  `reason` TEXT NOT NULL,
  `intendedUsage` TEXT NOT NULL,
  `expectedVolume` VARCHAR(191) NULL,
  `additionalInfo` TEXT NULL,
  `status` VARCHAR(191) NOT NULL DEFAULT 'PENDING',
  `reviewedBy` VARCHAR(191) NULL,
  `reviewedAt` DATETIME(3) NULL,
  `reviewReason` TEXT NULL,
  `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  `updatedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  PRIMARY KEY (`id`),
  INDEX `ApiAccessRequest_userId_idx` (`userId`),
  INDEX `ApiAccessRequest_status_idx` (`status`),
  CONSTRAINT `ApiAccessRequest_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------------------------
-- Table structure for `Webhook`
-- ------------------------------------------------------------------------------
DROP TABLE IF EXISTS `Webhook`;
CREATE TABLE `Webhook` (
  `id` VARCHAR(191) NOT NULL,
  `userId` VARCHAR(191) NOT NULL,
  `url` TEXT NOT NULL,
  `secret` VARCHAR(191) NOT NULL,
  `events` VARCHAR(191) NOT NULL,
  `status` VARCHAR(191) NOT NULL DEFAULT 'ACTIVE',
  `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  `updatedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  PRIMARY KEY (`id`),
  INDEX `Webhook_userId_idx` (`userId`),
  CONSTRAINT `Webhook_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------------------------
-- Table structure for `WebhookDelivery`
-- ------------------------------------------------------------------------------
DROP TABLE IF EXISTS `WebhookDelivery`;
CREATE TABLE `WebhookDelivery` (
  `id` VARCHAR(191) NOT NULL,
  `webhookId` VARCHAR(191) NOT NULL,
  `event` VARCHAR(191) NOT NULL,
  `payload` TEXT NOT NULL,
  `statusCode` INT NULL,
  `responseBody` TEXT NULL,
  `durationMs` INT NOT NULL DEFAULT 0,
  `status` VARCHAR(191) NOT NULL,
  `attemptCount` INT NOT NULL DEFAULT 1,
  `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  PRIMARY KEY (`id`),
  INDEX `WebhookDelivery_webhookId_idx` (`webhookId`),
  CONSTRAINT `WebhookDelivery_webhookId_fkey` FOREIGN KEY (`webhookId`) REFERENCES `Webhook` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------------------------
-- Table structure for `AuditLog`
-- ------------------------------------------------------------------------------
DROP TABLE IF EXISTS `AuditLog`;
CREATE TABLE `AuditLog` (
  `id` VARCHAR(191) NOT NULL,
  `actorId` VARCHAR(191) NULL,
  `actorEmail` VARCHAR(191) NOT NULL,
  `action` VARCHAR(191) NOT NULL,
  `targetUserId` VARCHAR(191) NULL,
  `targetUserCode` VARCHAR(191) NULL,
  `previousRole` VARCHAR(191) NULL,
  `newRole` VARCHAR(191) NULL,
  `resource` VARCHAR(191) NOT NULL,
  `details` TEXT NULL,
  `ipAddress` VARCHAR(191) NULL,
  `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  `userId` VARCHAR(191) NULL,
  PRIMARY KEY (`id`),
  INDEX `AuditLog_actorEmail_idx` (`actorEmail`),
  INDEX `AuditLog_action_idx` (`action`),
  CONSTRAINT `AuditLog_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------------------------
-- Table structure for `ApiUsage`
-- ------------------------------------------------------------------------------
DROP TABLE IF EXISTS `ApiUsage`;
CREATE TABLE `ApiUsage` (
  `id` VARCHAR(191) NOT NULL,
  `userId` VARCHAR(191) NOT NULL,
  `date` VARCHAR(191) NOT NULL,
  `endpoint` VARCHAR(191) NOT NULL,
  `method` VARCHAR(191) NOT NULL DEFAULT 'POST',
  `statusCode` INT NOT NULL DEFAULT 200,
  `count` INT NOT NULL DEFAULT 1,
  `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  `updatedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  PRIMARY KEY (`id`),
  UNIQUE INDEX `ApiUsage_userId_date_endpoint_statusCode_key` (`userId`, `date`, `endpoint`, `statusCode`),
  INDEX `ApiUsage_userId_date_idx` (`userId`, `date`),
  CONSTRAINT `ApiUsage_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------------------------
-- Table structure for `SupportTicket`
-- ------------------------------------------------------------------------------
DROP TABLE IF EXISTS `SupportTicket`;
CREATE TABLE `SupportTicket` (
  `id` VARCHAR(191) NOT NULL,
  `ticketCode` VARCHAR(191) NOT NULL,
  `userId` VARCHAR(191) NOT NULL,
  `subject` VARCHAR(191) NOT NULL,
  `status` VARCHAR(191) NOT NULL DEFAULT 'OPEN',
  `priority` VARCHAR(191) NOT NULL DEFAULT 'MEDIUM',
  `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  `updatedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  PRIMARY KEY (`id`),
  UNIQUE INDEX `SupportTicket_ticketCode_key` (`ticketCode`),
  INDEX `SupportTicket_userId_idx` (`userId`),
  INDEX `SupportTicket_status_idx` (`status`),
  CONSTRAINT `SupportTicket_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------------------------
-- Table structure for `TicketMessage`
-- ------------------------------------------------------------------------------
DROP TABLE IF EXISTS `TicketMessage`;
CREATE TABLE `TicketMessage` (
  `id` VARCHAR(191) NOT NULL,
  `ticketId` VARCHAR(191) NOT NULL,
  `senderId` VARCHAR(191) NOT NULL,
  `senderRole` VARCHAR(191) NOT NULL,
  `message` TEXT NOT NULL,
  `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  PRIMARY KEY (`id`),
  INDEX `TicketMessage_ticketId_idx` (`ticketId`),
  CONSTRAINT `TicketMessage_ticketId_fkey` FOREIGN KEY (`ticketId`) REFERENCES `SupportTicket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `TicketMessage_senderId_fkey` FOREIGN KEY (`senderId`) REFERENCES `User` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------------------------
-- Table structure for `UnitPricing`
-- ------------------------------------------------------------------------------
DROP TABLE IF EXISTS `UnitPricing`;
CREATE TABLE `UnitPricing` (
  `id` VARCHAR(191) NOT NULL,
  `itemKey` VARCHAR(191) NOT NULL,
  `displayName` VARCHAR(191) NOT NULL,
  `unitCost` DOUBLE NOT NULL,
  `category` VARCHAR(191) NOT NULL,
  `accountType` VARCHAR(191) NULL,
  `isActive` TINYINT(1) NOT NULL DEFAULT 1,
  `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  `updatedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  PRIMARY KEY (`id`),
  UNIQUE INDEX `UnitPricing_itemKey_key` (`itemKey`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------------------------
-- Table structure for `SystemSetting`
-- ------------------------------------------------------------------------------
DROP TABLE IF EXISTS `SystemSetting`;
CREATE TABLE `SystemSetting` (
  `key` VARCHAR(191) NOT NULL,
  `value` TEXT NOT NULL,
  `description` TEXT NULL,
  `updatedBy` VARCHAR(191) NULL,
  `updatedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ==============================================================================
-- Seed Initial Accounts & Configuration Data
-- ==============================================================================

-- 1. Unit Pricing
INSERT INTO `UnitPricing` (`id`, `itemKey`, `displayName`, `unitCost`, `category`, `accountType`, `isActive`, `createdAt`, `updatedAt`) VALUES
('price_1', 'nin_unit_cost', 'NIN Verification Unit Cost', 10, 'VERIFICATION_COST', NULL, 1, NOW(3), NOW(3)),
('price_2', 'phone_nin_unit_cost', 'Phone-to-NIN Verification Unit Cost', 15, 'VERIFICATION_COST', NULL, 1, NOW(3), NOW(3)),
('price_3', 'bvn_unit_cost', 'BVN Verification Unit Cost', 20, 'VERIFICATION_COST', NULL, 1, NOW(3), NOW(3)),
('price_4', 'unit_cost_standard', 'Standard User Unit Rate (NGN per unit)', 10, 'PURCHASE_PRICE', 'STANDARD', 1, NOW(3), NOW(3)),
('price_5', 'unit_cost_api_user', 'API User Volume Unit Rate (NGN per unit)', 8, 'PURCHASE_PRICE', 'API_USER', 1, NOW(3), NOW(3))
ON DUPLICATE KEY UPDATE `unitCost` = VALUES(`unitCost`);

-- 2. System Settings
INSERT INTO `SystemSetting` (`key`, `value`, `description`, `updatedBy`, `updatedAt`) VALUES
('platform_mode', 'SANDBOX', 'Active platform execution mode (SANDBOX/PRODUCTION)', 'admin@smartauth.ng', NOW(3)),
('signup_bonus_units', '1000', 'Complimentary Sandbox units credited upon registration', 'admin@smartauth.ng', NOW(3)),
('rate_limit_per_minute', '120', 'Max verification and API requests per minute', 'admin@smartauth.ng', NOW(3))
ON DUPLICATE KEY UPDATE `value` = VALUES(`value`);

-- 3. Core Accounts
-- Passwords:
-- admin@smartauth.ng    -> AdminPass123!
-- ops@smartauth.ng      -> AdminPass123!
-- apiuser@smartauth.ng  -> ApiUserPass123!
-- member@apexfintech.ng -> MemberPass123!
-- user@smartauth.ng     -> UserPass123!

INSERT INTO `User` (`id`, `userCode`, `email`, `name`, `phone`, `address`, `accountType`, `company`, `orgName`, `orgRcNumber`, `orgAddress`, `orgPhone`, `orgEmail`, `passwordHash`, `role`, `status`, `adminPermissions`, `teamOwnerId`, `memberPermissions`, `createdAt`, `updatedAt`) VALUES
('usr_admin_001', 'USR-2026-000001', 'admin@smartauth.ng', 'Dr. Abubakar Aliyu', '08020000001', 'Plot 412 Constitution Avenue, CBD, Abuja, Nigeria', 'ORGANIZATION', 'SmartAuth Technologies Ltd', 'SmartAuth Technologies Ltd', 'RC-998811', 'Plot 412 Constitution Avenue, Abuja', '08020000001', 'admin@smartauth.ng', '$2a$10$PXCth2OoYAuziLFJeaynCOex1wiLFk9SL6a8wHYpCngan8DjLN9Rq', 'SUPER_ADMIN', 'ACTIVE', '[\"USER_MANAGEMENT\",\"API_APPROVAL\",\"VERIFICATION_MANAGEMENT\",\"UNIT_PRICING\",\"SYSTEM_SETTINGS\",\"ROLE_MANAGEMENT\",\"ADMIN_MANAGEMENT\",\"SUPPORT_MANAGEMENT\",\"REPORTS_ANALYTICS\"]', NULL, NULL, NOW(3), NOW(3)),
('usr_ops_002', 'USR-2026-000002', 'ops@smartauth.ng', 'Chioma Okonkwo', '08020000002', '14 Adeola Odeku Street, Victoria Island, Lagos', 'INDIVIDUAL', NULL, NULL, NULL, NULL, NULL, NULL, '$2a$10$PXCth2OoYAuziLFJeaynCOex1wiLFk9SL6a8wHYpCngan8DjLN9Rq', 'ADMIN', 'ACTIVE', '[\"USER_MANAGEMENT\",\"API_APPROVAL\",\"VERIFICATION_MANAGEMENT\",\"SUPPORT_MANAGEMENT\"]', NULL, NULL, NOW(3), NOW(3)),
('usr_api_003', 'USR-2026-000003', 'apiuser@smartauth.ng', 'Tunde Fashola', '08020000003', 'Plot 8B Commercial District, Lekki Phase 1, Lagos', 'ORGANIZATION', 'Apex FinTech Nigeria Ltd', 'Apex FinTech Nigeria Ltd', 'RC-104829', 'Plot 8B Commercial District, Lekki Phase 1, Lagos', '08020000003', 'apiuser@smartauth.ng', '$2a$10$uG5HtrVoHdQRJnN65KaWJuJb.XlEKvh62pqEySDE8somcKBgJXPaS', 'API_USER', 'ACTIVE', NULL, NULL, NULL, NOW(3), NOW(3)),
('usr_mem_004', 'USR-2026-MEM-0001', 'member@apexfintech.ng', 'Ngozi Eze', '08020000005', 'Plot 8B Commercial District, Lekki Phase 1, Lagos', 'INDIVIDUAL', 'Apex FinTech Nigeria Ltd', NULL, NULL, NULL, NULL, NULL, '$2a$10$A.hY1hIbNYG9RbhINdfwmuUJh7QR6rFic26sjGBREeD.HoaSbP/Vm', 'STANDARD_USER', 'ACTIVE', NULL, 'usr_api_003', '[\"VERIFICATION\",\"DOCS\",\"TESTING\"]', NOW(3), NOW(3)),
('usr_std_005', 'USR-2026-000004', 'user@smartauth.ng', 'Emmanuel Adebayo', '08020000004', '24 Ahmadu Bello Way, Kaduna, Nigeria', 'INDIVIDUAL', NULL, NULL, NULL, NULL, NULL, NULL, '$2a$10$wSNwUFiCa92p9CsQ2VMgvezNbWqVOkAdHHjyEJ1UXVe2Cep3xv4fy', 'STANDARD_USER', 'ACTIVE', NULL, NULL, NULL, NOW(3), NOW(3))
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);

-- 4. Wallets
INSERT INTO `Wallet` (`id`, `userId`, `unitsBalance`, `totalUnitsPurchased`, `totalUnitsUsed`, `createdAt`, `updatedAt`) VALUES
('wal_admin_001', 'usr_admin_001', 50000, 50000, 0, NOW(3), NOW(3)),
('wal_ops_002', 'usr_ops_002', 20000, 20000, 0, NOW(3), NOW(3)),
('wal_api_003', 'usr_api_003', 12500, 15000, 2500, NOW(3), NOW(3)),
('wal_mem_004', 'usr_mem_004', 0, 0, 0, NOW(3), NOW(3)),
('wal_std_005', 'usr_std_005', 1000, 1000, 0, NOW(3), NOW(3))
ON DUPLICATE KEY UPDATE `unitsBalance` = VALUES(`unitsBalance`);

-- 5. API Keys
INSERT INTO `ApiKey` (`id`, `name`, `keyPrefix`, `keyHash`, `environment`, `status`, `userId`, `createdAt`, `updatedAt`) VALUES
('key_api_sandbox', 'Default Sandbox Key', 'sk_test_apex7749', '4a7d65609462bc5a6f23f8a42b109dcfa3f80c65dfbcfcb2f8208f4c1e403d52', 'SANDBOX', 'ACTIVE', 'usr_api_003', NOW(3), NOW(3)),
('key_api_live', 'Production REST Key', 'sk_live_apex1092', 'b8cf5f661a5118742b3fc28a7e0d37e6f9872584102c98d601b0f5923dc1792a', 'PRODUCTION', 'ACTIVE', 'usr_api_003', NOW(3), NOW(3))
ON DUPLICATE KEY UPDATE `status` = VALUES(`status`);

SET FOREIGN_KEY_CHECKS = 1;
