<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('tarneeb_games', function (Blueprint $table) {
            $table->id();
            $table->uuid('uuid')->unique();

            // ------------------------------------------------------------
            // 🪑 المقاعد الأربعة — [A1, B1, A2, B2] (الشركاء بمقاعد متقابلة: 0↔2, 1↔3)
            // ------------------------------------------------------------
            $table->foreignId('seat0_user_id')->constrained('users')->cascadeOnDelete(); // منشئ اللعبة (فريق A)
            $table->foreignId('seat1_user_id')->nullable()->constrained('users')->nullOnDelete(); // فريق B
            $table->foreignId('seat2_user_id')->nullable()->constrained('users')->nullOnDelete(); // شريك المنشئ (فريق A)
            $table->foreignId('seat3_user_id')->nullable()->constrained('users')->nullOnDelete(); // فريق B

            $table->decimal('bet_amount_per_player', 18, 2); // المبلغ اللي يدفعه كل لاعب
            $table->decimal('commission_percent', 5, 2)->default(10.00);
            $table->decimal('commission_amount', 18, 2)->nullable();
            $table->decimal('payout_per_winner', 18, 2)->nullable();

            $table->string('status')->default('waiting'); // waiting|in_progress|completed|cancelled
            $table->string('winner_team')->nullable(); // 'A' | 'B'
            $table->timestamp('expires_at')->nullable();

            // ------------------------------------------------------------
            // 🃏 حالة اليد الحالية (تُصفّر بعد كل توزيعة)
            // ------------------------------------------------------------
            $table->unsignedTinyInteger('dealer_seat')->default(0);
            $table->unsignedInteger('hand_number')->default(1);
            $table->string('phase')->default('dealing'); // dealing|bidding|playing|hand_complete
            $table->unsignedTinyInteger('current_turn_seat')->nullable();

            $table->json('hands')->nullable();            // {"0": ["10H","AS",...], "1": [...], ...} أوراق كل مقعد المتبقية
            $table->string('trump_suit')->nullable();      // H|D|S|C
            $table->string('cut_card')->nullable();        // مثال: "10H" الورقة اللي حددت الحكم

            $table->json('bids')->nullable();               // {"0": 4, "1": null, "2": 7, "3": null}
            $table->unsignedTinyInteger('redeal_count')->default(0);

            $table->json('current_trick')->nullable();     // {"leader_seat": 1, "cards": {"1": "AH", "2": "3H"}}
            $table->unsignedTinyInteger('current_trick_leader_seat')->nullable();
            $table->string('lead_suit')->nullable();

            $table->json('tricks_won_this_hand')->nullable(); // {"0": 2, "1": 3, "2": 1, "3": 0}

            // ------------------------------------------------------------
            // 🏆 النقاط التراكمية لكل مقعد طوال الماتش
            // ------------------------------------------------------------
            $table->json('scores')->default(json_encode(['0' => 0, '1' => 0, '2' => 0, '3' => 0]));

            $table->timestamps();

            $table->index(['status', 'expires_at']);
        });

        // سجل مختصر لكل توزيعة مكتملة (لأغراض العرض التاريخي فقط)
        Schema::create('tarneeb_hand_history', function (Blueprint $table) {
            $table->id();
            $table->foreignId('game_id')->constrained('tarneeb_games')->cascadeOnDelete();
            $table->unsignedInteger('hand_number');
            $table->string('trump_suit');
            $table->json('bids');
            $table->json('tricks_won');
            $table->json('hand_scores'); // النقاط المكتسبة/المخصومة بهاي التوزيعة فقط
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('tarneeb_hand_history');
        Schema::dropIfExists('tarneeb_games');
    }
};
