<PhoenixKitWeb.Components.LayoutWrapper.app_layout
  flash={@flash}
  phoenix_kit_current_scope={assigns[:phoenix_kit_current_scope]}
  page_title="Storage Dimensions"
  current_path={@current_path}
  current_locale={@current_locale}
  project_title={@project_title}
>
  <div class="container mx-auto px-4 py-8 max-w-6xl">
    <.admin_page_header
      back={PhoenixKit.Utils.Routes.path("/admin/settings/media")}
      title={gettext("Instance Dimensions")}
      subtitle={gettext("Manage dimension presets for automatic file instance generation")}
    />

    <%!-- Info Alert --%>
    <div class="alert alert-info mb-6">
      <.icon name="hero-information-circle" class="w-5 h-5" />
      <div>
        <div class="flex justify-between items-start">
          <div>
            <h3 class="font-bold">{gettext("Dimension Presets")}</h3>
            <p class="text-sm">
              {gettext(
                "Dimensions define the target sizes for automatic variant generation. Images are resized and videos are transcoded to these preset sizes."
              )}
              {gettext(
                "The migration seeds 8 default dimensions: 4 image sizes (thumbnail, small, medium, large) and 4 video variants (360p, 720p, 1080p, video_thumbnail)."
              )}
            </p>
          </div>
          <button
            phx-click="reset_dimensions_to_defaults"
            data-confirm={
              gettext(
                "Are you sure? This will delete all current dimensions and restore the default 8 dimensions. This action cannot be undone."
              )
            }
            class="btn btn-error btn-sm"
          >
            <.icon name="hero-arrow-path" class="w-4 h-4 mr-1" /> {gettext("Reset to Defaults")}
          </button>
        </div>
      </div>
    </div>

    <%!-- Dimensions List --%>
    <div class="card bg-base-100 shadow-xl">
      <div class="card-body">
        <%= if length(@dimensions) == 0 do %>
          <div class="text-center py-12">
            <.icon name="hero-photo" class="w-16 h-16 mx-auto mb-4 text-base-content/30" />
            <p class="text-lg text-base-content/70 mb-2">
              {gettext("No dimensions configured")}
            </p>
            <p class="text-sm text-base-content/50 mb-4">
              {gettext("Create your first dimension preset to start generating file variants.")}
            </p>
            <div class="flex justify-center gap-4">
              <.link
                navigate={
                  PhoenixKit.Utils.Routes.path("/admin/settings/media/dimensions/new/image")
                }
                class="btn btn-info"
              >
                <.icon name="hero-plus" class="w-4 h-4 mr-1" /> {gettext("Add Image Dimension")}
              </.link>
              <.link
                navigate={
                  PhoenixKit.Utils.Routes.path("/admin/settings/media/dimensions/new/video")
                }
                class="btn btn-warning"
              >
                <.icon name="hero-plus" class="w-4 h-4 mr-1" /> {gettext("Add Video Dimension")}
              </.link>
            </div>
          </div>
        <% else %>
          <%!-- Image Dimensions --%>
          <div class="mb-8">
            <div class="flex justify-between items-center mb-4">
              <h3 class="text-2xl font-bold text-info">
                <.icon name="hero-photo" class="w-6 h-6 mr-2" /> {gettext("Image Dimensions")}
              </h3>
              <.link
                navigate={
                  PhoenixKit.Utils.Routes.path("/admin/settings/media/dimensions/new/image")
                }
                class="btn btn-info"
              >
                <.icon name="hero-plus" class="w-4 h-4 mr-1" /> {gettext("Add Image Dimension")}
              </.link>
            </div>

            <% image_dims =
              Enum.filter(@dimensions, &(&1.applies_to in ["image", "both"])) %>

            <.table_default
              id="image-dimensions-table"
              variant="zebra"
              toggleable={true}
              items={image_dims}
              card_title={fn d -> d.name end}
              card_fields={
                fn d ->
                  [
                    %{
                      label: gettext("Size"),
                      value:
                        if(d.maintain_aspect_ratio,
                          do: "#{d.width}px",
                          else: format_dimension_size(d.width, d.height)
                        )
                    },
                    %{
                      label: gettext("Mode"),
                      value:
                        if(d.maintain_aspect_ratio,
                          do: gettext("Aspect Ratio"),
                          else: gettext("Fixed")
                        )
                    },
                    %{label: gettext("Quality"), value: "#{d.quality}%"},
                    %{
                      label: gettext("Format"),
                      value:
                        if(d.format, do: String.upcase(d.format), else: gettext("Original")) <>
                          if((d.alternative_formats || []) != [],
                            do:
                              " + " <>
                                Enum.map_join(d.alternative_formats, ", ", &String.upcase/1),
                            else: ""
                          )
                    },
                    %{
                      label: gettext("Status"),
                      value: if(d.enabled, do: gettext("Enabled"), else: gettext("Disabled"))
                    }
                  ]
                end
              }
            >
              <.table_default_header>
                <.table_default_row>
                  <.table_default_header_cell>{gettext("Name")}</.table_default_header_cell>
                  <.table_default_header_cell>{gettext("Size")}</.table_default_header_cell>
                  <.table_default_header_cell>{gettext("Mode")}</.table_default_header_cell>
                  <.table_default_header_cell>{gettext("Quality")}</.table_default_header_cell>
                  <.table_default_header_cell>{gettext("Format")}</.table_default_header_cell>
                  <.table_default_header_cell>{gettext("Status")}</.table_default_header_cell>
                  <.table_default_header_cell>{gettext("Actions")}</.table_default_header_cell>
                </.table_default_row>
              </.table_default_header>
              <.table_default_body>
                <%= for dimension <- image_dims do %>
                  <.table_default_row>
                    <.table_default_cell>
                      <div class="font-bold">{dimension.name}</div>
                    </.table_default_cell>
                    <.table_default_cell>
                      <span class="font-mono text-sm">
                        <%= if dimension.maintain_aspect_ratio do %>
                          {dimension.width}px
                        <% else %>
                          {format_dimension_size(dimension.width, dimension.height)}
                        <% end %>
                      </span>
                    </.table_default_cell>
                    <.table_default_cell>
                      <%= if dimension.maintain_aspect_ratio do %>
                        <span class="badge badge-info badge-sm h-auto">
                          {gettext("Aspect Ratio")}
                        </span>
                      <% else %>
                        <span class="badge badge-secondary badge-sm h-auto">
                          {gettext("Fixed")}
                        </span>
                      <% end %>
                    </.table_default_cell>
                    <.table_default_cell>
                      <span class="text-sm">{dimension.quality}%</span>
                    </.table_default_cell>
                    <.table_default_cell>
                      <%= if dimension.format do %>
                        <span class="text-sm font-mono uppercase">{dimension.format}</span>
                      <% else %>
                        <span class="text-sm text-base-content/60">{gettext("Original")}</span>
                      <% end %>
                      <%= if (dimension.alternative_formats || []) != [] do %>
                        <%= for fmt <- dimension.alternative_formats do %>
                          <span class="badge badge-outline badge-xs font-mono uppercase">
                            +{fmt}
                          </span>
                        <% end %>
                      <% end %>
                    </.table_default_cell>
                    <.table_default_cell>
                      <%= if dimension.enabled do %>
                        <span class="badge badge-success badge-sm h-auto">
                          {gettext("Enabled")}
                        </span>
                      <% else %>
                        <span class="badge badge-error badge-sm h-auto">
                          {gettext("Disabled")}
                        </span>
                      <% end %>
                    </.table_default_cell>
                    <.table_default_cell>
                      <.table_row_menu
                        id={"img-dim-menu-#{dimension.uuid}"}
                        label={gettext("Dimension actions")}
                      >
                        <.table_row_menu_link
                          navigate={
                            PhoenixKit.Utils.Routes.path(
                              "/admin/settings/media/dimensions/#{dimension.uuid}/edit"
                            )
                          }
                          icon="hero-pencil"
                          label={gettext("Edit")}
                        />
                        <.table_row_menu_button
                          phx-click="toggle_dimension"
                          phx-debounce="1000"
                          phx-value-id={dimension.uuid}
                          icon={if dimension.enabled, do: "hero-eye-slash", else: "hero-eye"}
                          label={
                            if dimension.enabled, do: gettext("Disable"), else: gettext("Enable")
                          }
                        />
                        <.table_row_menu_button
                          phx-click="delete_dimension"
                          phx-debounce="1000"
                          phx-value-id={dimension.uuid}
                          data-confirm={
                            gettext("Are you sure you want to delete this dimension?")
                          }
                          icon="hero-trash"
                          label={gettext("Delete")}
                          class="text-error"
                        />
                      </.table_row_menu>
                    </.table_default_cell>
                  </.table_default_row>
                <% end %>
              </.table_default_body>

              <:card_actions :let={dimension}>
                <.link
                  navigate={
                    PhoenixKit.Utils.Routes.path(
                      "/admin/settings/media/dimensions/#{dimension.uuid}/edit"
                    )
                  }
                  class="btn btn-xs btn-outline btn-info"
                >
                  <.icon name="hero-pencil" class="w-3 h-3" /> {gettext("Edit")}
                </.link>
                <button
                  phx-click="toggle_dimension"
                  phx-debounce="1000"
                  phx-value-id={dimension.uuid}
                  class="btn btn-xs btn-outline"
                >
                  {if dimension.enabled, do: gettext("Disable"), else: gettext("Enable")}
                </button>
                <button
                  phx-click="delete_dimension"
                  phx-debounce="1000"
                  phx-value-id={dimension.uuid}
                  data-confirm={gettext("Are you sure you want to delete this dimension?")}
                  class="btn btn-xs btn-outline btn-error"
                >
                  <.icon name="hero-trash" class="w-3 h-3" /> {gettext("Delete")}
                </button>
              </:card_actions>
            </.table_default>
          </div>

          <%!-- Video Dimensions --%>
          <div>
            <div class="flex justify-between items-center mb-4">
              <h3 class="text-2xl font-bold text-warning">
                <.icon name="hero-video-camera" class="w-6 h-6 mr-2" /> {gettext(
                  "Video Dimensions"
                )}
              </h3>
              <.link
                navigate={
                  PhoenixKit.Utils.Routes.path("/admin/settings/media/dimensions/new/video")
                }
                class="btn btn-warning"
              >
                <.icon name="hero-plus" class="w-4 h-4 mr-1" /> {gettext("Add Video Dimension")}
              </.link>
            </div>

            <% video_dims =
              Enum.filter(@dimensions, &(&1.applies_to in ["video", "both"])) %>

            <.table_default
              id="video-dimensions-table"
              variant="zebra"
              toggleable={true}
              items={video_dims}
              card_title={fn d -> d.name end}
              card_fields={
                fn d ->
                  [
                    %{
                      label: gettext("Resolution"),
                      value:
                        if(d.maintain_aspect_ratio,
                          do: "#{d.width}px",
                          else: format_dimension_size(d.width, d.height)
                        )
                    },
                    %{
                      label: gettext("Mode"),
                      value:
                        if(d.maintain_aspect_ratio,
                          do: gettext("Aspect Ratio"),
                          else: gettext("Fixed")
                        )
                    },
                    %{label: gettext("Quality (CRF)"), value: "#{d.quality}"},
                    %{
                      label: gettext("Codec"),
                      value: if(d.format, do: String.upcase(d.format), else: gettext("Original"))
                    },
                    %{
                      label: gettext("Status"),
                      value: if(d.enabled, do: gettext("Enabled"), else: gettext("Disabled"))
                    }
                  ]
                end
              }
            >
              <.table_default_header>
                <.table_default_row>
                  <.table_default_header_cell>{gettext("Name")}</.table_default_header_cell>
                  <.table_default_header_cell>
                    {gettext("Resolution")}
                  </.table_default_header_cell>
                  <.table_default_header_cell>{gettext("Mode")}</.table_default_header_cell>
                  <.table_default_header_cell>
                    {gettext("Quality (CRF)")}
                  </.table_default_header_cell>
                  <.table_default_header_cell>{gettext("Codec")}</.table_default_header_cell>
                  <.table_default_header_cell>{gettext("Status")}</.table_default_header_cell>
                  <.table_default_header_cell>{gettext("Actions")}</.table_default_header_cell>
                </.table_default_row>
              </.table_default_header>
              <.table_default_body>
                <%= for dimension <- video_dims do %>
                  <.table_default_row>
                    <.table_default_cell>
                      <div class="font-bold">{dimension.name}</div>
                    </.table_default_cell>
                    <.table_default_cell>
                      <span class="font-mono text-sm">
                        <%= if dimension.maintain_aspect_ratio do %>
                          {dimension.width}px
                        <% else %>
                          {format_dimension_size(dimension.width, dimension.height)}
                        <% end %>
                      </span>
                    </.table_default_cell>
                    <.table_default_cell>
                      <%= if dimension.maintain_aspect_ratio do %>
                        <span class="badge badge-info badge-sm h-auto">
                          {gettext("Aspect Ratio")}
                        </span>
                      <% else %>
                        <span class="badge badge-secondary badge-sm h-auto">
                          {gettext("Fixed")}
                        </span>
                      <% end %>
                    </.table_default_cell>
                    <.table_default_cell>
                      <span class="text-sm">{dimension.quality}</span>
                    </.table_default_cell>
                    <.table_default_cell>
                      <%= if dimension.format do %>
                        <span class="text-sm font-mono uppercase">{dimension.format}</span>
                      <% else %>
                        <span class="text-sm text-base-content/60">{gettext("Original")}</span>
                      <% end %>
                      <%= if (dimension.alternative_formats || []) != [] do %>
                        <%= for fmt <- dimension.alternative_formats do %>
                          <span class="badge badge-outline badge-xs font-mono uppercase">
                            +{fmt}
                          </span>
                        <% end %>
                      <% end %>
                    </.table_default_cell>
                    <.table_default_cell>
                      <%= if dimension.enabled do %>
                        <span class="badge badge-success badge-sm h-auto">
                          {gettext("Enabled")}
                        </span>
                      <% else %>
                        <span class="badge badge-error badge-sm h-auto">
                          {gettext("Disabled")}
                        </span>
                      <% end %>
                    </.table_default_cell>
                    <.table_default_cell>
                      <.table_row_menu
                        id={"vid-dim-menu-#{dimension.uuid}"}
                        label={gettext("Dimension actions")}
                      >
                        <.table_row_menu_link
                          navigate={
                            PhoenixKit.Utils.Routes.path(
                              "/admin/settings/media/dimensions/#{dimension.uuid}/edit"
                            )
                          }
                          icon="hero-pencil"
                          label={gettext("Edit")}
                        />
                        <.table_row_menu_button
                          phx-click="toggle_dimension"
                          phx-debounce="1000"
                          phx-value-id={dimension.uuid}
                          icon={if dimension.enabled, do: "hero-eye-slash", else: "hero-eye"}
                          label={
                            if dimension.enabled, do: gettext("Disable"), else: gettext("Enable")
                          }
                        />
                        <.table_row_menu_button
                          phx-click="delete_dimension"
                          phx-debounce="1000"
                          phx-value-id={dimension.uuid}
                          data-confirm={
                            gettext("Are you sure you want to delete this dimension?")
                          }
                          icon="hero-trash"
                          label={gettext("Delete")}
                          class="text-error"
                        />
                      </.table_row_menu>
                    </.table_default_cell>
                  </.table_default_row>
                <% end %>
              </.table_default_body>

              <:card_actions :let={dimension}>
                <.link
                  navigate={
                    PhoenixKit.Utils.Routes.path(
                      "/admin/settings/media/dimensions/#{dimension.uuid}/edit"
                    )
                  }
                  class="btn btn-xs btn-outline btn-info"
                >
                  <.icon name="hero-pencil" class="w-3 h-3" /> {gettext("Edit")}
                </.link>
                <button
                  phx-click="toggle_dimension"
                  phx-debounce="1000"
                  phx-value-id={dimension.uuid}
                  class="btn btn-xs btn-outline"
                >
                  {if dimension.enabled, do: gettext("Disable"), else: gettext("Enable")}
                </button>
                <button
                  phx-click="delete_dimension"
                  phx-debounce="1000"
                  phx-value-id={dimension.uuid}
                  data-confirm={gettext("Are you sure you want to delete this dimension?")}
                  class="btn btn-xs btn-outline btn-error"
                >
                  <.icon name="hero-trash" class="w-3 h-3" /> {gettext("Delete")}
                </button>
              </:card_actions>
            </.table_default>
          </div>
        <% end %>
      </div>
    </div>

    <%!-- Help Section --%>
    <div class="alert mt-6">
      <.icon name="hero-light-bulb" class="w-5 h-5" />
      <div>
        <h3 class="font-bold">{gettext("Variant Generation System")}</h3>
        <p class="text-sm">
          <strong>{gettext("Quality Settings:")}</strong>
          {gettext("Images use 1-100 scale (compression quality)")}<br />
          <strong>{gettext("Video Settings:")}</strong>
          {gettext("Videos use CRF 0-51 scale (lower = higher quality)")}<br />
          <strong>{gettext("Format Override:")}</strong>
          {gettext("Leave empty to preserve original format, or specify jpg/png/webp/mp4")}
        </p>
      </div>
    </div>
  </div>
</PhoenixKitWeb.Components.LayoutWrapper.app_layout>
