<script setup lang="ts">
import { ref } from "vue";
import { useRulebooksStore } from "@/stores/rulebooks";
import type { Rulebook } from "@/api/rulebooks";

defineProps<{ rulebooks: Rulebook[]; selectedId: number | null; sweepActive: boolean }>();
const emit = defineEmits<{ select: [id: number]; "select-sweep": [] }>();

const store = useRulebooksStore();
const isCreating = ref(false);
const newTitle = ref("");

async function submitNew() {
  const title = newTitle.value.trim();
  if (!title) return;
  const rb = await store.createRulebook({ title });
  newTitle.value = "";
  isCreating.value = false;
  emit("select", rb.id);
}
</script>

<template>
  <aside class="pane">
    <header><h2>Rulebooks</h2></header>
    <ul>
      <li
        v-for="rb in rulebooks"
        :key="rb.id"
        :class="{ active: rb.id === selectedId }"
        @click="emit('select', rb.id)"
      >
        <span class="title">{{ rb.title }}</span>
        <span v-if="rb.always_on" class="always-on-badge" title="Loaded at session start">always on</span>
      </li>
    </ul>
    <!-- Not a rulebook, and deliberately below them: a cross-cutting view over
         every rule the operator owns. It lives here because this is where you
         come to look at rules, and a rule that has gone false belongs to no
         one rulebook. -->
    <button
      class="sweep-entry"
      :class="{ active: sweepActive }"
      @click="emit('select-sweep')"
    >
      Due for verification
    </button>

    <div class="new-rulebook">
      <button v-if="!isCreating" @click="isCreating = true">+ New rulebook</button>
      <form v-else @submit.prevent="submitNew">
        <input v-model="newTitle" autofocus placeholder="Rulebook title" />
        <div class="form-buttons">
          <button type="submit">Create</button>
          <button type="button" @click="isCreating = false">Cancel</button>
        </div>
      </form>
    </div>
  </aside>
</template>

<style src="@/assets/rules-shared.css" />
<style scoped>
ul { list-style: none; padding: 0; margin: 1rem 0; }
li { padding: 0.5rem; cursor: pointer; border-radius: 6px; display: flex; align-items: center; gap: 0.5rem; }
li.active { background: var(--fs-accent-soft); }
li:hover { background: var(--fs-surface-hover); }
.always-on-badge {
  font-size: 0.7rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  padding: 0.1rem 0.4rem;
  border-radius: 3px;
  background: var(--fs-accent);
  color: var(--fs-text-on-action);
  margin-left: auto;
}
.sweep-entry {
  display: block; width: 100%; text-align: left;
  margin-top: var(--fs-space-3);
  padding: 0.5rem; border-radius: 6px;
  background: none; border: 1px dashed var(--fs-border-color);
  color: var(--fs-text-secondary); font: inherit; cursor: pointer;
}
.sweep-entry:hover { background: var(--fs-surface-hover); }
.sweep-entry.active { background: var(--fs-accent-soft); color: var(--fs-text-primary); }
.new-rulebook { margin-top: 1rem; }
.new-rulebook input {
  width: 100%; margin-bottom: 0.5rem;
  background: var(--fs-surface-page); color: inherit;
  border: 1px solid var(--fs-border-color); border-radius: 6px;
  padding: 0.5rem;
}
button { cursor: pointer; }
</style>
