<PhoenixKitWeb.Components.LayoutWrapper.app_layout
  flash={@flash}
  phoenix_kit_current_scope={assigns[:phoenix_kit_current_scope]}
  page_title="{@project_title} Settings"
  current_path={@url_path}
  project_title={@project_title}
  current_locale={@current_locale}
>
  <div class="container flex flex-col mx-auto px-4 py-6">
    <.admin_page_header
      back={PhoenixKit.Utils.Routes.path("/admin")}
      title="Settings"
      subtitle="Configure system preferences and options"
    />

    <%!-- Settings Form --%>
    <div class="max-w-2xl mx-auto">
      <div class="card bg-base-100 shadow-xl">
        <div class="card-body">
          <h2 class="card-title text-xl mb-6">System Configuration</h2>

          <.form
            :let={_form}
            for={@changeset}
            id="settings_form"
            phx-submit="save_settings"
            phx-change="validate_settings"
            class="space-y-6"
          >
            <%!-- Hidden fields for required settings from Users page --%>
            <%!-- Use @saved_settings to preserve database values, not @settings which may have incorrect form state --%>
            <input
              type="hidden"
              name="settings[allow_registration]"
              value={@saved_settings["allow_registration"]}
            />
            <input
              type="hidden"
              name="settings[new_user_default_role]"
              value={@saved_settings["new_user_default_role"]}
            />
            <input
              type="hidden"
              name="settings[new_user_default_status]"
              value={@saved_settings["new_user_default_status"]}
            />
            <input
              type="hidden"
              name="settings[track_registration_geolocation]"
              value={@saved_settings["track_registration_geolocation"]}
            />

            <%!-- Project Title Setting --%>
            <div class="form-control w-full">
              <label class="label">
                <span class="label-text text-base font-medium">Project Title</span>
                <span class="label-text-alt text-sm text-base-content/60">
                  Application name display
                </span>
              </label>
              <input
                name="settings[project_title]"
                type="text"
                value={@settings["project_title"]}
                class="input input-bordered w-full focus:input-primary"
                placeholder="Enter project title"
                phx-debounce="500"
              />
              <div class="label">
                <span class="label-text-alt text-xs text-base-content/50">
                  <%= if @settings["project_title"] != @saved_settings["project_title"] do %>
                    <span class="text-warning">
                      Selected: {@settings["project_title"]}
                    </span>
                    <span class="text-base-content/40">
                      | Saved: {@saved_settings["project_title"]}
                    </span>
                  <% else %>
                    Saved: {@settings["project_title"]}
                  <% end %>
                </span>
              </div>
            </div>

            <%!-- Site Address URL Setting --%>
            <div class="form-control w-full">
              <label class="label">
                <span class="label-text text-base font-medium">Site Address (URL)</span>
              </label>
              <input
                name="settings[site_url]"
                type="url"
                value={@settings["site_url"]}
                class="input input-bordered w-full focus:input-primary"
                placeholder="https://site.com"
                phx-debounce="500"
              />
              <div class="label">
                <span class="label-text-alt text-xs text-base-content/50">
                  <%= if @settings["site_url"] != @saved_settings["site_url"] do %>
                    <span class="text-warning">
                      Selected: {if @settings["site_url"] != "",
                        do: @settings["site_url"],
                        else: "(empty)"}
                    </span>
                    <span class="text-base-content/40">
                      | Saved: {if @saved_settings["site_url"] != "",
                        do: @saved_settings["site_url"],
                        else: "(empty)"}
                    </span>
                  <% else %>
                    Saved: {if @settings["site_url"] != "",
                      do: @settings["site_url"],
                      else: "(empty)"}
                  <% end %>
                </span>
              </div>
            </div>

            <%!-- Week Start Day Setting --%>
            <div class="form-control w-full">
              <label class="label">
                <span class="label-text text-base font-medium">Week Start On</span>
                <span class="label-text-alt text-sm text-base-content/60">
                  First day of the week
                </span>
              </label>
              <select
                name="settings[week_start_day]"
                class="select select-bordered w-full focus:select-primary"
              >
                <%= for {label, value} <- @setting_options["week_start_day"] do %>
                  <option value={value} selected={value == @settings["week_start_day"]}>
                    {label}
                  </option>
                <% end %>
              </select>
              <div class="label">
                <span class="label-text-alt text-xs text-base-content/50">
                  <%= if @settings["week_start_day"] != @saved_settings["week_start_day"] do %>
                    <span class="text-warning">
                      Selected: {get_option_label(
                        @settings["week_start_day"],
                        @setting_options["week_start_day"]
                      )}
                    </span>
                    <span class="text-base-content/40">
                      | Saved: {get_option_label(
                        @saved_settings["week_start_day"],
                        @setting_options["week_start_day"]
                      )}
                    </span>
                  <% else %>
                    Saved: {get_option_label(
                      @settings["week_start_day"],
                      @setting_options["week_start_day"]
                    )}
                  <% end %>
                </span>
              </div>
            </div>

            <%!-- Time Zone Setting --%>
            <div class="form-control w-full">
              <label class="label">
                <span class="label-text text-base font-medium">Time Zone</span>
                <span class="label-text-alt text-sm text-base-content/60">
                  System default timezone
                </span>
              </label>
              <select
                name="settings[time_zone]"
                class="select select-bordered w-full focus:select-primary"
              >
                <%= for {label, value} <- @setting_options["time_zone"] do %>
                  <option value={value} selected={value == @settings["time_zone"]}>
                    {label}
                  </option>
                <% end %>
              </select>
              <div class="label">
                <span class="label-text-alt text-xs text-base-content/50">
                  <%= if @settings["time_zone"] != @saved_settings["time_zone"] do %>
                    <span class="text-warning">
                      Selected: {get_timezone_label(@settings["time_zone"], @setting_options)}
                    </span>
                    <span class="text-base-content/40">
                      | Saved: {get_timezone_label(@saved_settings["time_zone"], @setting_options)}
                    </span>
                  <% else %>
                    Saved: {get_timezone_label(@settings["time_zone"], @setting_options)}
                  <% end %>
                </span>
              </div>
            </div>

            <%!-- Date Format Setting --%>
            <div class="form-control w-full">
              <label class="label">
                <span class="label-text text-base font-medium">Date Format</span>
                <span class="label-text-alt text-sm text-base-content/60">
                  How dates are displayed
                </span>
              </label>
              <select
                name="settings[date_format]"
                class="select select-bordered w-full focus:select-primary"
              >
                <%= for {label, value} <- @setting_options["date_format"] do %>
                  <option value={value} selected={value == @settings["date_format"]}>
                    {label}
                  </option>
                <% end %>
              </select>
              <div class="label">
                <span class="label-text-alt text-xs text-base-content/50">
                  <%= if @settings["date_format"] != @saved_settings["date_format"] do %>
                    <span class="text-warning">
                      Selected: {get_option_label(
                        @settings["date_format"],
                        @setting_options["date_format"]
                      )}
                    </span>
                    <span class="text-base-content/40">
                      | Saved: {get_option_label(
                        @saved_settings["date_format"],
                        @setting_options["date_format"]
                      )}
                    </span>
                  <% else %>
                    Saved: {get_option_label(
                      @settings["date_format"],
                      @setting_options["date_format"]
                    )}
                  <% end %>
                </span>
              </div>
            </div>

            <%!-- Time Format Setting --%>
            <div class="form-control w-full">
              <label class="label">
                <span class="label-text text-base font-medium">Time Format</span>
                <span class="label-text-alt text-sm text-base-content/60">
                  How times are displayed
                </span>
              </label>
              <select
                name="settings[time_format]"
                class="select select-bordered w-full focus:select-primary"
              >
                <%= for {label, value} <- @setting_options["time_format"] do %>
                  <option value={value} selected={value == @settings["time_format"]}>
                    {label}
                  </option>
                <% end %>
              </select>
              <div class="label">
                <span class="label-text-alt text-xs text-base-content/50">
                  <%= if @settings["time_format"] != @saved_settings["time_format"] do %>
                    <span class="text-warning">
                      Selected: {get_option_label(
                        @settings["time_format"],
                        @setting_options["time_format"]
                      )}
                    </span>
                    <span class="text-base-content/40">
                      | Saved: {get_option_label(
                        @saved_settings["time_format"],
                        @setting_options["time_format"]
                      )}
                    </span>
                  <% else %>
                    Saved: {get_option_label(
                      @settings["time_format"],
                      @setting_options["time_format"]
                    )}
                  <% end %>
                </span>
              </div>
            </div>

            <%!-- Action Buttons --%>
            <div class="flex gap-3 pt-4">
              <button
                type="submit"
                class={[
                  "btn btn-primary flex-1",
                  if(@saving, do: "loading", else: "")
                ]}
                disabled={@saving}
              >
                <%= if @saving do %>
                  Saving...
                <% else %>
                  Save All Settings
                <% end %>
              </button>

              <button
                type="button"
                class="btn btn-outline"
                phx-click="reset_to_defaults"
              >
                <PhoenixKitWeb.Components.Core.Icons.icon_refresh class="w-4 h-4 mr-2" /> Reset
              </button>
            </div>
          </.form>

          <%!-- Information Panel --%>
          <div class="divider">Information</div>

          <div class="bg-base-200 rounded-lg p-4 mt-6">
            <div class="flex items-start gap-3">
              <div class="text-2xl">💡</div>
              <div class="flex-1">
                <h3 class="font-semibold text-base-content mb-2">About System Settings</h3>
                <ul class="text-sm text-base-content/70 space-y-1">
                  <li>• Make changes to dropdowns and click "Save All Settings" to apply</li>
                  <li>• Changes show "Selected" vs "Saved" values until you click Save</li>
                  <li>
                    • User settings (registration, defaults, custom fields) are managed separately
                  </li>
                  <li>
                    • Week start day controls which day begins the week (useful for calendar features)
                  </li>
                  <li>• Time zone affects date/time display throughout the system</li>
                  <li>
                    • Date formats control how dates appear (e.g. Users dashboard "Registered" field)
                  </li>
                  <li>• Time formats control 12-hour vs 24-hour time display</li>
                  <li>• Settings are applied system-wide and use Timex for robust formatting</li>
                  <li>• Currently supports 6 date formats including "September 2, 2025" style</li>
                </ul>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</PhoenixKitWeb.Components.LayoutWrapper.app_layout>
