<?php

use App\Models\Polymorphs\AuditLog;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {

    public function up(){
        $this->down();

        Schema::create((new AuditLog)->getTable(), function (Blueprint $table) {
            $table->id();
            $table->enum('type',["created",'updated',"updated"])->default("created")
                  ->comment("La type de l'audit (Ex : 'updated'");

            $table->string(AuditLog::MORPH_ID_COLUMN, 100)->nullable()
                  ->comment("[polymorph_id] l'id du model qui est audité  (ex : '1')");

            $table->string(AuditLog::MORPH_TYPE_COLUMN, 100)->nullable()
                  ->comment("[polymorph_type] le type du model audité  nom de cette table utilisé par laravel)
                  pour faire la correspondance de l'enregistrement  (ex : 'user')");

            $table->string(AuditLog::MORPH_AUTHOR_ID_COLUMN, 100)->nullable()
                  ->comment("[polymorph_id] l'id du model auteur de l'audit  (ex : '1')");

            $table->string(AuditLog::MORPH_AUTHOR_TYPE_COLUMN, 100)->nullable()
                 ->comment("[polymorph_type] le type du model auteur de l'audit audité  nom de cette table utilisé par laravel)
                  pour faire la correspondance de l'enregistrement  (ex : 'user')");

            $table->json('originals_properties')->nullable()
                  ->comment("Les propriétés du model avant l'audit");

            $table->json('changes_properties')->nullable()
                ->comment("Les propriétés du model avant l'audit");

            $table->string('host', 45)->nullable()
                   ->comment("Le host/ip du cleint qui a validé la requête");

            $table->text('agent')->nullable()
                  ->comment("Le terminal/navigateur utilisé pour effectuer l'audit");

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

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