-- Create Users Table
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    phone VARCHAR(20),
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    wallet_balance DECIMAL(15, 2) DEFAULT 0.00,
    referral_code VARCHAR(50),
    referred_by VARCHAR(50),
    user_type ENUM('admin', 'ib', 'user') DEFAULT 'user',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- Create IBs Table (Introducing Brokers)
CREATE TABLE ibs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    ib_code VARCHAR(50) NOT NULL UNIQUE,
    level INT DEFAULT 1,
    parent_ib INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (parent_ib) REFERENCES ibs(id)
);

-- Create Trades Table
CREATE TABLE trades (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    trade_type VARCHAR(10) NOT NULL,
    currency_pair VARCHAR(10) NOT NULL,
    amount DECIMAL(15, 2) NOT NULL,
    profit_loss DECIMAL(15, 2) DEFAULT 0.00,
    trade_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

-- Create Commissions Table
CREATE TABLE commissions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ib_id INT NOT NULL,
    trade_id INT NOT NULL,
    commission_rate DECIMAL(5, 2) NOT NULL,
    commission_amount DECIMAL(15, 2) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (ib_id) REFERENCES ibs(id),
    FOREIGN KEY (trade_id) REFERENCES trades(id)
);

-- Create Wallets Table
CREATE TABLE wallets (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    balance DECIMAL(15, 2) DEFAULT 0.00,
    last_transaction DECIMAL(15, 2),
    transaction_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

-- Create Transactions Table (for wallet operations)
CREATE TABLE transactions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    transaction_type ENUM('recharge', 'withdraw') NOT NULL,
    amount DECIMAL(15, 2) NOT NULL,
    transaction_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

-- Create Permissions Table (Optional for role-based access)
CREATE TABLE permissions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    role VARCHAR(20) NOT NULL,
    permission_name VARCHAR(100) NOT NULL
);

-- Add Indexes for faster querying (optional but recommended)
CREATE INDEX idx_users_email ON users (email);
CREATE INDEX idx_ib_user_id ON ibs (user_id);
CREATE INDEX idx_trades_user_id ON trades (user_id);
CREATE INDEX idx_commissions_ib_id ON commissions (ib_id);
CREATE INDEX idx_wallets_user_id ON wallets (user_id);
CREATE INDEX idx_transactions_user_id ON transactions (user_id);
