<?php
include 'core/vendor/autoload.php';
$app = include_once 'core/bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use App\Models\Admin;
use Illuminate\Support\Facades\Hash;

// 1. Modify admins table
if (!Schema::hasColumn('admins', 'role')) {
    Schema::table('admins', function (Blueprint $table) {
        $table->tinyInteger('role')->default(1)->comment('1: Master Admin, 2: Subadmin');
        $table->decimal('wallet', 18, 8)->default(0);
        $table->string('unique_code')->nullable();
    });
    echo "Admins table updated.\n";
}

// 2. Modify users table
if (!Schema::hasColumn('users', 'subadmin_id')) {
    Schema::table('users', function (Blueprint $table) {
        $table->integer('subadmin_id')->default(0);
    });
    echo "Users table updated.\n";
}

// 3. Create Subadmin Deposit/Withdrawal Request table
if (!Schema::hasTable('subadmin_requests')) {
    Schema::create('subadmin_requests', function (Blueprint $table) {
        $table->id();
        $table->integer('subadmin_id');
        $table->decimal('amount', 18, 8);
        $table->string('type')->comment('deposit/withdraw');
        $table->string('trx_id')->nullable();
        $table->string('screenshot')->nullable();
        $table->text('details')->nullable();
        $table->tinyInteger('status')->default(0)->comment('0: pending, 1: approved, 2: rejected');
        $table->timestamps();
    });
    echo "Subadmin requests table created.\n";
}

// 4. Create User Deposit Request to Subadmin table
if (!Schema::hasTable('user_deposit_requests')) {
    Schema::create('user_deposit_requests', function (Blueprint $table) {
        $table->id();
        $table->integer('user_id');
        $table->integer('subadmin_id');
        $table->decimal('amount', 18, 8);
        $table->string('trx_id')->nullable();
        $table->string('screenshot')->nullable();
        $table->tinyInteger('status')->default(0)->comment('0: pending, 1: approved, 2: rejected');
        $table->timestamps();
    });
    echo "User deposit requests table created.\n";
}

// 5. Create some subadmins and migrate users
$masterAdmin = Admin::where('username', 'admin')->first();
if($masterAdmin){
    $masterAdmin->role = 1;
    $masterAdmin->save();
}

$sub1 = Admin::where('username', 'subadmin1')->first();
if(!$sub1){
    $sub1 = new Admin();
    $sub1->name = "Sub Admin 1";
    $sub1->username = "subadmin1";
    $sub1->email = "subadmin1@example.com";
    $sub1->password = Hash::make('password');
    $sub1->role = 2;
    $sub1->unique_code = "SA001";
    $sub1->save();
}

$sub2 = Admin::where('username', 'subadmin2')->first();
if(!$sub2){
    $sub2 = new Admin();
    $sub2->name = "Sub Admin 2";
    $sub2->username = "subadmin2";
    $sub2->email = "subadmin2@example.com";
    $sub2->password = Hash::make('password');
    $sub2->role = 2;
    $sub2->unique_code = "SA002";
    $sub2->save();
}

// Assign existing users to subadmin1 as a start
\App\Models\User::where('subadmin_id', 0)->update(['subadmin_id' => $sub1->id]);
echo "Existing users assigned to Sub Admin 1.\n";
