<?php

use App\Models\PaymentManagement\Payment;
use App\Models\PaymentManagement\PaymentUsage;
use Illuminate\Database\Migrations\Migration;
use App\Helpers\DatabaseSchema\Schema;
use App\Helpers\DatabaseSchema\CustomBluePrint as Blueprint;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up(){
        Schema::create((new PaymentUsage)->getTable(), function (Blueprint $table) {
            $table->id();

            $table->foreignIdFor(Payment::class,'payment_id')
                ->constrained((new Payment)->getTable(), (new Payment)->getKeyName(),uniqid("FK_"))
                ->cascadeOnUpdate()->cascadeOnDelete()
                ->comment("[FK] Le payment");

//            $table->float("remaining_amount_before")->nullable()
//                ->comment("Montant restant du paiment avant l'utilisation");
//
//            $table->float("remaining_amount_after")->nullable()
//                ->comment("Montant restant du paiment après l'utilisation");

            $table->float("amount_used")->nullable()
                ->comment("Montant utilisé sur le paiment");

            $table->string(PaymentUsage::MORPH_ID_COLUMN,60)->nullable()
                 ->comment("[Polymorph] L'id du model sur lequel a été utilisé le paiement (Ex: '1')");

            $table->string(PaymentUsage::MORPH_TYPE_COLUMN,100)->nullable()
                ->comment("[Polymorph] Le type de model qui a utilisé le paiement (Ex: 'order')");

            $table->boolean("is_first_usage")->default(false)
                ->comment("Détermine si la ligne est la toute première utilisation du paiement (Ex: '1')");

            $table->boolean("deleted")->default(false)
                ->comment("Détermine si la ligne a été supprimé comme utilisation (Ex: '1')");
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down(){
        Schema::dropIfExists((new PaymentUsage)->getTable());
    }
};
