<?php

use App\Models\PaymentManagement\Payment;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

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

            $table->string("provider_reference")
                ->comment("La reférence externe/fournisseur de la transaction");

            $table->string("internal_reference")
                ->unique()->nullable()
                ->comment("La reférence interne de la transaction");

            $table->unsignedBigInteger("payment_method_id")
                 ->nullable()
                 ->comment("[FK] La methode de paiement");

            $table->float("paid_amount")
                ->nullable()
                ->comment("Montant verser par le payeur (Ex: '3000')");

            $table->float("remaining_amount")
                ->nullable()
                ->comment("Montant versé par le payeur (Ex: '3000')");

            $table->string("payer_number",100)
                ->nullable()
                ->comment("le numéro utilisé par le payeur pour effectuer la transaction (E: '237683523318')");

            $table->string(Payment::MORPH_ID_COLUMN,60)
                ->nullable()
                ->comment("[Polymorph] L'id du payeur Ex: '1'");

            $table->string(Payment::MORPH_TYPE_COLUMN,100)
                 ->nullable()
                 ->comment("[Polymorph] Le type du payeur Ex: 'user'");

            $table->boolean("created_by_api")
                 ->default(false)
                 ->comment("Détermine si le paiement provient d'une api (Ex: '1')");

            $table->boolean("saved_by_cron")
                 ->default(false)
                 ->comment("Détermine si le paiement a été enregistré par le cron Ex: '1'");

            $table->boolean("visible")
                ->default(true)
                ->comment("Détermine si le paiement est visible/utilsable par le payeur (Ex: '1')");

            $table->timestamp("paid_at")
                   ->nullable()
                  ->comment("La date du versement (Ex: '2022-03-21')");

            $table->timestamp("expired_at")
                   ->nullable()
                  ->comment("La date d'espiration (Ex: '2022-03-21')");


            $table->timestamps();
            $table->softDeletes();

            $table->unique(["payment_method_id",'provider_reference']);
        });
    }

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