<?php

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

class CreateHelloworldsTable extends Migration
{
  /**
   * Run the migrations.
   */
  public function up(): void
  {
    Schema::create('helloworlds', function (Blueprint $table) {
      $table->id();
      // $table->id('id_field');
      // $table->bigIncrements('bigIncrements_field');
      // $table->increments('increments_field')->nullable();
      // $table->mediumIncrements('mediumIncrements_field')->nullable();
      // $table->smallIncrements('smallIncrements_field')->nullable();
      // $table->tinyIncrements('tinyIncrements_field')->nullable();

      $table->string('name');
      $table->string('string_field')->nullable();
      $table->integer('integer_field')->nullable();
      $table->float('float_field')->nullable();
      $table->decimal('decimal_field', 8, 6)->nullable();
      $table->boolean('boolean_field')->nullable();

      $table->date('date_field')->nullable();
      $table->time('time_field')->nullable();
      $table->dateTime('datetime_field')->nullable();
      $table->timestamp('timestamp_field')->nullable();
      $table->text('text_field')->nullable();
      $table->json('json_field')->nullable();
      $table->uuid('uuid_field')->nullable();
      $table->ipAddress('ip_address_field')->nullable();
      $table->macAddress('mac_address_field')->nullable();

      $table->bigInteger('bigInteger_field')->nullable();
      $table->binary('binary_field')->nullable();
      $table->char('char_field')->nullable();
      $table->dateTimeTz('dateTimeTz_field')->nullable();
      $table->double('double_field')->nullable();
      $table
        ->enum('enum_field', ['option_1', 'option_2', 'option_3'])
        ->nullable();
      // $table->foreignId('foreignId_field');
      // $table->foreignIdFor('foreignIdFor_field');
      // $table->foreignUlid('foreignUlid_field');
      // $table->foreignUuid('foreignUuid_field');

      $table->geometryCollection('geometryCollection_field')->nullable();
      $table->geometry('geometry_field')->nullable();

      $table->ipAddress('ipAddress_field')->nullable();

      $table->jsonb('jsonb_field')->nullable();
      $table->lineString('lineString_field')->nullable();
      $table->longText('longText_field')->nullable();
      $table->macAddress('macAddress_field')->nullable();
      $table->mediumInteger('mediumInteger_field')->nullable();
      $table->mediumText('mediumText_field')->nullable();
      // $table->morphs('morphs_field')->nullable();
      $table->multiLineString('multiLineString_field')->nullable();

      $table->multiPoint('multiPoint_field')->nullable();
      $table->multiPolygon('multiPolygon_field')->nullable();
      // $table->nullableMorphs('nullableMorphs_field')->nullable();
      // $table->nullableTimestamps('nullableTimestamps_field')->nullable();
      // $table->nullableUlidMorphs('nullableUlidMorphs_field')->nullable();
      // $table->nullableUuidMorphs('nullableUuidMorphs_field')->nullable();
      $table->point('point_field')->nullable();
      $table->polygon('polygon_field')->nullable();

      // $table->set('set_field')->nullable();

      $table->smallInteger('smallInteger_field')->nullable();
      $table->softDeletesTz('softDeletesTz_field')->nullable();
      $table->softDeletes('softDeletes_field')->nullable();

      $table->timeTz('timeTz_field')->nullable();
      // $table->timestampTz('timestampTz_field')->nullable();
      // $table->timestampsTz('timestampsTz_field')->nullable();
      // $table->timestamps('timestamps_field')->nullable();

      $table->tinyInteger('tinyInteger_field')->nullable();
      $table->tinyText('tinyText_field')->nullable();
      $table->unsignedBigInteger('unsignedBigInteger_field')->nullable();
      $table->unsignedDecimal('unsignedDecimal_field')->nullable();
      $table->unsignedInteger('unsignedInteger_field')->nullable();
      $table->unsignedMediumInteger('unsignedMediumInteger_field')->nullable();
      $table->unsignedSmallInteger('unsignedSmallInteger_field')->nullable();
      $table->unsignedTinyInteger('unsignedTinyInteger_field')->nullable();
      // $table->ulidMorphs('ulidMorphs_field')->nullable();
      // $table->uuidMorphs('uuidMorphs_field')->nullable();
      $table->ulid('ulid_field')->nullable();
      $table->year('year_field')->nullable();

      $table->rememberToken();

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

  /**
   * Reverse the migrations.
   */
  public function down(): void
  {
    Schema::dropIfExists('helloworlds');
  }
}

// https://laravel.com/docs/10.x/migrations#column-method-bigIncrements
// bigIncrements
// bigInteger
// binary
// boolean
// char
// dateTimeTz
// dateTime
// date
// decimal
// double
// enum
// float
// foreignId
// foreignIdFor
// foreignUlid
// foreignUuid
// geometryCollection
// geometry
// id
// increments
// integer
// ipAddress
// json
// jsonb
// lineString
// longText
// macAddress
// mediumIncrements
// mediumInteger
// mediumText
// morphs
// multiLineString
// multiPoint
// multiPolygon
// nullableMorphs
// nullableTimestamps
// nullableUlidMorphs
// nullableUuidMorphs
// point
// polygon
// rememberToken
// set
// smallIncrements
// smallInteger
// softDeletesTz
// softDeletes
// string
// text
// timeTz
// time
// timestampTz
// timestamp
// timestampsTz
// timestamps
// tinyIncrements
// tinyInteger
// tinyText
// unsignedBigInteger
// unsignedDecimal
// unsignedInteger
// unsignedMediumInteger
// unsignedSmallInteger
// unsignedTinyInteger
// ulidMorphs
// uuidMorphs
// ulid
// uuid
// year
