<.link navigate={~p"/schedules"} class="shrink-0 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300" > <.icon name="hero-arrow-left" class="h-5 w-5" />

{@schedule.name}

{@schedule.timezone}

<.link navigate={~p"/schedules/#{@schedule.id}/edit"} class="inline-flex items-center gap-2 rounded-lg bg-white dark:bg-gray-800 px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors" > <.icon name="hero-pencil" class="h-4 w-4" />
<%= if @schedule.description do %>

{@schedule.description}

<% end %> <%!-- On-Call Status --%>
<.icon name="hero-user" class={[ "h-5 w-5", @on_call && "text-green-600 dark:text-green-400", !@on_call && "text-gray-400 dark:text-gray-500" ]} />

{t("Currently On-Call")}

<%= if @on_call do %>

{display_name(@on_call)}

<% else %>

{t("No one is currently on-call")}

<% end %>
<%!-- Timeline --%>
<%!-- Timeline navigation --%>
{Calendar.strftime(@timeline_start, "%b %-d")} – {Calendar.strftime( @timeline_end, "%b %-d, %Y" )}
{t("2 Weeks")}
<%!-- Layer timelines --%> <%= if @layer_timelines != [] do %>

{t("Configuration Layers")}

<%= for lt <- @layer_timelines do %>
<%!-- Day headers --%>
<%= for day <- @timeline_days do %>
{Calendar.strftime(day, "%-d %a")}
<% end %>
<%!-- Timeline bar --%>
{lt.layer.name}
<%= for span <- lt.spans do %>
{display_name(span.user)}
<% end %> <%!-- Today marker --%> <% today_offset = Date.diff(Date.utc_today(), @timeline_start) %> <%= if today_offset >= 0 and today_offset < @timeline_days do %>
<% end %>
<% end %>
<%!-- Final Schedule --%>

{t("Final Schedule")}

<%!-- Day headers --%>
<%= for day <- @timeline_days do %>
{Calendar.strftime(day, "%-d %a")}
<% end %>
<%!-- Timeline bar --%>
<%= for span <- @final_spans do %>
{display_name(span.user)}
<% end %> <%!-- Today marker --%> <% today_offset = Date.diff(Date.utc_today(), @timeline_start) %> <%= if today_offset >= 0 and today_offset < @timeline_days do %>
<% end %>
<% end %>
<%!-- Layers --%>

{t("Layers")}

<%= if @show_add_layer do %>
<.form for={@layer_form} phx-change="validate_layer" phx-submit="save_layer">
<.input field={@layer_form[:name]} type="text" label={t("Layer Name")} placeholder="Layer 1" /> <.input field={@layer_form[:rotation_type]} type="select" label={t("Rotation Type")} options={[{t("Daily"), "daily"}, {t("Weekly"), "weekly"}, {t("Custom"), "custom"}]} /> <.input field={@layer_form[:rotation_interval]} type="number" label={t("Rotation Interval")} min="1" /> <.input field={@layer_form[:handoff_time]} type="time" label={t("Handoff Time")} /> <.input field={@layer_form[:handoff_day]} type="select" label={t("Handoff Day")} options={[ {t("Sunday"), "0"}, {t("Monday"), "1"}, {t("Tuesday"), "2"}, {t("Wednesday"), "3"}, {t("Thursday"), "4"}, {t("Friday"), "5"}, {t("Saturday"), "6"} ]} /> <.input field={@layer_form[:start_date]} type="datetime-local" label={t("Start Date")} />
<%!-- User selection for new layer --%>
<%= if @new_layer_members != [] do %>
<%= for user <- @new_layer_members do %> {display_name(user)} <% end %>
<% end %> <% new_member_ids = Enum.map(@new_layer_members, & &1.id) %> <% available = Enum.reject(@org_users, &(&1.id in new_member_ids)) %> <%= unless Enum.empty?(available) do %> <% end %>
<.button type="submit" phx-disable-with={t("Saving...")}> {t("Add Layer")}
<% end %> <%= if Enum.empty?(@schedule.layers) do %>

{t("No layers configured. Add a layer to define rotation coverage.")}

<% else %> <% sorted_layers = Enum.sort_by(@schedule.layers, & &1.position) %> <% layer_count = length(sorted_layers) %>
<%= for {layer, idx} <- Enum.with_index(sorted_layers) do %>
<.icon name="hero-bars-3" class="h-4 w-4 text-gray-400 mt-0.5 shrink-0" />

{layer.name}

{String.capitalize(layer.rotation_type)} rotation, every {layer.rotation_interval} <%= case layer.rotation_type do %> <% "daily" -> %> {ngettext("day", "days", layer.rotation_interval)} <% "weekly" -> %> {ngettext("week", "weeks", layer.rotation_interval)} <% _ -> %> {ngettext("day", "days", layer.rotation_interval)} <% end %> · Handoff at {Calendar.strftime(layer.handoff_time, "%H:%M")}

<%!-- Members --%>

{t("Members")}

<%= if Enum.empty?(layer.members) do %>

{t("No members yet")}

<% else %>
<%= for member <- Enum.sort_by(layer.members, & &1.position) do %> {display_name(member.user)} <% end %>
<% end %> <%!-- Add member dropdown --%> <% existing_user_ids = Enum.map(layer.members, & &1.user_id) %> <% available_users = Enum.reject(@org_users, &(&1.id in existing_user_ids)) %> <%= unless Enum.empty?(available_users) do %> <% end %>
<%!-- Restrictions editor --%>

{t("Restrict on-call shifts")}

<%= if layer.restriction_type in ["time_of_day", "time_of_week"] do %>
{t("From")} {t("to")}
<% end %> <%= if layer.restriction_type == "time_of_week" do %>
<% selected_days = ((layer.restrictions || %{})["days"] || []) |> Enum.map(fn d -> case d do d when is_integer(d) -> d d when is_binary(d) -> String.to_integer(d) end end) %> <%= for {label, day} <- [{"Mon", 1}, {"Tue", 2}, {"Wed", 3}, {"Thu", 4}, {"Fri", 5}, {"Sat", 6}, {"Sun", 7}] do %> <% end %>
<% end %>
<% end %>
<% end %>
<%!-- Overrides --%>

{t("Overrides")}

<%= if @show_add_override do %>
<.form for={@override_form} phx-change="validate_override" phx-submit="save_override">
<.input field={@override_form[:user_id]} type="select" label={t("User")} options={Enum.map(@org_users, &{display_name(&1), &1.id})} prompt={t("Select user...")} /> <.input field={@override_form[:start_time]} type="datetime-local" label={t("Start Time")} /> <.input field={@override_form[:end_time]} type="datetime-local" label={t("End Time")} />
<.button type="submit" phx-disable-with={t("Saving...")}> {t("Add Override")}
<% end %> <%= if Enum.empty?(@schedule.overrides) do %>

{t("No overrides configured.")}

<% else %>
<%= for override <- @schedule.overrides do %> <% end %>
{t("User")} {t("Start")} {t("End")}
{display_name(override.user)} {Calendar.strftime(override.start_time, "%Y-%m-%d %H:%M")} {Calendar.strftime(override.end_time, "%Y-%m-%d %H:%M")}
<% end %>