<PhoenixKitWeb.Components.LayoutWrapper.app_layout
  flash={@flash}
  phoenix_kit_current_scope={assigns[:phoenix_kit_current_scope]}
  page_title={@page_title}
  current_path={@current_path}
  current_locale={@current_locale}
  project_title={@project_title}
>
  <div class="container mx-auto px-4 py-8 max-w-4xl">
    <%!-- Header Section --%>
    <header class="w-full relative mb-6">
      <%!-- Back Button --%>
      <.link
        navigate={PhoenixKit.Utils.Routes.path("/admin/settings/media/dimensions")}
        class="btn btn-outline mb-4"
      >
        <.icon name="hero-arrow-left" class="w-4 h-4 mr-2" /> Back to Dimensions
      </.link>

      <%!-- Title Section --%>
      <div class="text-center mb-8">
        <h1 class="text-4xl font-bold text-base-content mb-2">
          {@page_title}
        </h1>
        <p class="text-base-content/70">
          Configure dimension presets for automatic file variant generation
        </p>
      </div>
    </header>

    <%!-- Form Section --%>
    <div class="card bg-base-100 shadow-xl">
      <div class="card-body">
        <.form for={@changeset} phx-change="validate" phx-submit="save" class="space-y-6">
          <%!-- Basic Information --%>
          <div class="form-control">
            <label class="label">
              <span class="label-text font-semibold">Dimension Name *</span>
              <span class="label-text-alt">Unique name for this dimension preset</span>
            </label>
            <input
              type="text"
              name="dimension[name]"
              phx-debounce="blur"
              value={get_field_value(@changeset, :name)}
              class={"input input-bordered #{input_class(@changeset, :name)}"}
              placeholder="e.g., thumbnail, medium, 720p"
              required
            />
            {render_error(@changeset, :name)}
          </div>

          <%!-- Aspect Ratio Toggle --%>
          <div class="form-control">
            <label class="label cursor-pointer">
              <span class="label-text font-semibold">
                <.icon name="hero-photo" class="w-4 h-4 inline mr-2" /> Maintain Aspect Ratio
              </span>
              <%!-- Hidden input sends "false" by default, checkbox overrides with "true" --%>
              <input type="hidden" name="dimension[maintain_aspect_ratio]" value="false" />
              <input
                type="checkbox"
                name="dimension[maintain_aspect_ratio]"
                value="true"
                checked={get_field_value(@changeset, :maintain_aspect_ratio) != false}
                phx-change="validate"
                class="checkbox checkbox-primary"
              />
            </label>
            <p class="text-sm text-base-content/60 mt-1">
              <%= if get_field_value(@changeset, :maintain_aspect_ratio) != false do %>
                When enabled: Only width is used, height is calculated automatically
              <% else %>
                When disabled: Both width and height are used for fixed dimensions (crops/thumbnails)
              <% end %>
            </p>
          </div>

          <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
            <div class="form-control">
              <label class="label">
                <span class="label-text font-semibold">
                  <%= if get_field_value(@changeset, :maintain_aspect_ratio) != false do %>
                    Target Width (px) *
                  <% else %>
                    Width (px) *
                  <% end %>
                </span>
                <span class="label-text-alt">
                  <%= if get_field_value(@changeset, :maintain_aspect_ratio) != false do %>
                    Target width for responsive sizing
                  <% else %>
                    Width in pixels
                  <% end %>
                </span>
              </label>
              <input
                type="number"
                name="dimension[width]"
                phx-debounce="blur"
                value={get_field_value(@changeset, :width)}
                class={"input input-bordered #{input_class(@changeset, :width)}"}
                placeholder="800"
                min="1"
                required
              />
              {render_error(@changeset, :width)}
            </div>

            <%= if get_field_value(@changeset, :maintain_aspect_ratio) == false do %>
              <div class="form-control">
                <label class="label">
                  <span class="label-text font-semibold">Height (px) *</span>
                  <span class="label-text-alt">Required for fixed dimensions</span>
                </label>
                <input
                  type="number"
                  name="dimension[height]"
                  phx-debounce="blur"
                  value={get_field_value(@changeset, :height)}
                  class={"input input-bordered #{input_class(@changeset, :height)}"}
                  placeholder="600"
                  min="1"
                  required
                />
                {render_error(@changeset, :height)}
              </div>
            <% end %>
          </div>

          <%!-- Quality and Format --%>
          <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
            <div class="form-control">
              <label class="label">
                <span class="label-text font-semibold">
                  <%= if @dimension_type == "video" do %>
                    Quality (CRF)
                  <% else %>
                    Quality
                  <% end %>
                </span>
                <span class="label-text-alt">
                  <%= if @dimension_type == "video" do %>
                    Compression quality (0-51, lower = higher quality)
                  <% else %>
                    Compression quality (1-100)
                  <% end %>
                </span>
              </label>
              <input
                type="number"
                name="dimension[quality]"
                phx-debounce="blur"
                value={get_field_value(@changeset, :quality)}
                class={"input input-bordered #{input_class(@changeset, :quality)}"}
                placeholder={if @dimension_type == "video", do: "23", else: "85"}
                min={if @dimension_type == "video", do: "0", else: "1"}
                max={if @dimension_type == "video", do: "51", else: "100"}
              />
              {render_error(@changeset, :quality)}
              <label class="label">
                <span class="label-text-alt">
                  <%= if @dimension_type == "video" do %>
                    Videos use CRF 0-51 (lower = higher quality, 18-28 recommended)
                  <% else %>
                    Images use 1-100 (higher = better quality, 80-90 recommended)
                  <% end %>
                </span>
              </label>
            </div>

            <div class="form-control">
              <label class="label">
                <span class="label-text font-semibold">
                  <%= if @dimension_type == "video" do %>
                    Codec Override
                  <% else %>
                    Format Override
                  <% end %>
                </span>
                <span class="label-text-alt">Leave empty to preserve original</span>
              </label>
              <%!-- Get format value safely --%>
              <% format_value = get_field_value(@changeset, :format) %>

              <select
                name="dimension[format]"
                class={"select select-bordered #{input_class(@changeset, :format)}"}
              >
                <option value="">Preserve original</option>
                <%= if @dimension_type != "video" do %>
                  <option value="jpg" selected={format_value == "jpg"}>
                    JPEG
                  </option>
                  <option value="png" selected={format_value == "png"}>
                    PNG
                  </option>
                  <option value="webp" selected={format_value == "webp"}>
                    WebP
                  </option>
                <% end %>
                <%= if @dimension_type == "video" do %>
                  <option value="mp4" selected={format_value == "mp4"}>
                    MP4
                  </option>
                <% end %>
              </select>
              {render_error(@changeset, :format)}
            </div>
          </div>

          <%!-- Hidden field for applies_to (auto-set based on dimension type) --%>
          <input
            type="hidden"
            name="dimension[applies_to]"
            value={@dimension_type}
          />

          <%!-- Form Actions --%>
          <div class="flex justify-end gap-2 pt-4">
            <.link
              navigate={PhoenixKit.Utils.Routes.path("/admin/settings/media/dimensions")}
              class="btn btn-outline"
            >
              Cancel
            </.link>
            <button type="submit" class="btn btn-primary" disabled={!@changeset.valid?}>
              <.icon name="hero-check" class="w-4 h-4 mr-1" />
              {@form_action}
            </button>
          </div>
        </.form>
      </div>
    </div>

    <%!-- Help Section --%>
    <div class="alert mt-6">
      <.icon name="hero-light-bulb" class="w-5 h-5" />
      <div>
        <h3 class="font-bold">Dimension Configuration Guide</h3>
        <p class="text-sm">
          <strong>Maintain Aspect Ratio (Default ON):</strong>
          When enabled, only the width is used and height is calculated automatically to preserve the image's aspect ratio. Perfect for responsive images.<br />
          <strong>Fixed Dimensions (When Aspect Ratio OFF):</strong>
          Both width and height are used for exact dimensions. Images are center-cropped to fit. Great for thumbnails and square previews.<br />
          <strong>Quality Settings:</strong>
          Images use 1-100 (compression quality), Videos use CRF 0-51 (constant rate factor)<br />
          <strong>Format Override:</strong>
          Use to convert files to a specific format, or leave empty to preserve original
        </p>
      </div>
    </div>
  </div>
</PhoenixKitWeb.Components.LayoutWrapper.app_layout>
