defmodule Chaskiq.Repo.Migrations.CreateActiveStorageTables do
  use Ecto.Migration

  def change do
    create table(:active_storage_blobs) do
      # add :id, :uuid, primary_key: true, null: false
      add(:key, :string, null: false)
      add(:filename, :string, null: false)
      add(:content_type, :string)
      add(:metadata, :string)
      add(:service_name, :string, null: false)
      add(:byte_size, :integer, null: false)
      add(:checksum, :string)

      timestamps(inserted_at: :created_at, updated_at: :updated_at)
    end

    create(unique_index(:active_storage_blobs, [:key]))

    create table(:active_storage_attachments) do
      add(:name, :string, null: false)
      add(:record_id, :integer)
      add(:record_type, :string)

      add(:blob_id, :integer)
      add(:blob_type, :string)

      timestamps(inserted_at: :created_at, updated_at: :updated_at)
    end

    create(
      index("active_storage_attachments", [:record_type, :record_id, :name, :blob_id],
        name: :index_active_storage_attachments_uniqueness,
        unique: true
      )
    )

    create(
      index("active_storage_attachments", [:blob_id],
        name: :index_active_storage_attachments_on_blob_id,
        unique: false
      )
    )

    create table(:active_storage_variant_records) do
      # for binary types use:
      # add :blob_id, references(:active_storage_blobs, on_delete: :nothing, type: :binary_id)
      add(:blob_id, references(:active_storage_blobs, on_delete: :nothing))
      add(:variation_digest, :string, null: false)
      timestamps(inserted_at: :created_at, updated_at: :updated_at)
    end

    create(index(:active_storage_variant_records, [:blob_id, :variation_digest]))
    # with: [group_id: :group_id])
    # add :blob_id, references("active_storage_blobs")
  end
end
