<template>
  <section class="flex flex-col gap-2 rounded-lg border border-zinc-800 bg-zinc-900/50 p-3">
    <header class="flex items-center gap-2">
      <h2 class="font-semibold text-zinc-100">{{ repo.label }}</h2>
      <span v-if="!repo.valid" class="badge bg-red-950 text-red-400">{{ t('repos.invalid') }}</span>
      <span class="truncate font-mono text-xs text-zinc-500" :title="repo.path">{{ repo.path }}</span>
      <div class="ml-auto flex items-center gap-2">
        <button class="btn text-xs" @click="creating = !creating">{{ t('worktrees.new') }}</button>
        <button class="btn text-xs" :disabled="busy" @click="onPrune">{{ t('worktrees.prune') }}</button>
        <button class="btn-danger text-xs" @click="onRemove">{{ t('repos.remove') }}</button>
      </div>
    </header>

    <form v-if="creating" class="flex flex-wrap items-end gap-2 rounded border border-zinc-800 bg-zinc-950/40 p-2" @submit.prevent="onCreate">
      <label class="flex flex-1 flex-col gap-1 text-xs text-zinc-400">
        {{ t('worktrees.branch') }}
        <input v-model="branch" class="input font-mono" :placeholder="repo.defaultBranch ? `feature/…` : 'feature/…'" required />
      </label>
      <label class="flex flex-col gap-1 text-xs text-zinc-400">
        {{ t('worktrees.start') }}
        <select v-model="startSession" class="input">
          <option :value="null">{{ t('worktrees.startNone') }}</option>
          <option value="claude">claude</option>
          <option value="bash">bash</option>
        </select>
      </label>
      <label class="flex items-center gap-1 text-xs text-zinc-400"><input v-model="newBranch" type="checkbox" /> {{ t('worktrees.newBranch') }}</label>
      <button type="submit" class="btn-primary text-xs" :disabled="busy || branch.trim() === ''">
        {{ busy ? t('worktrees.creating') : t('worktrees.create') }}
      </button>
    </form>
    <p v-if="error" class="text-sm text-red-400">{{ error }}</p>

    <div class="flex flex-col gap-1.5">
      <WorktreeCard v-for="w in worktrees" :key="w.path" :worktree="w" />
    </div>
  </section>
</template>

<script setup lang="ts">
import { computed, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import type { RepoSummary } from '@arboretum/shared';
import { useWorktreesStore } from '../stores/worktrees';
import WorktreeCard from './WorktreeCard.vue';

const props = defineProps<{ repo: RepoSummary }>();
const { t } = useI18n();
const store = useWorktreesStore();

const worktrees = computed(() => store.worktreesForRepo(props.repo.id));
const creating = ref(false);
const branch = ref('');
const newBranch = ref(true);
const startSession = ref<'claude' | 'bash' | null>(null);
const busy = ref(false);
const error = ref<string | null>(null);

async function onCreate(): Promise<void> {
  busy.value = true;
  error.value = null;
  try {
    await store.createWorktree(props.repo.id, { branch: branch.value.trim(), newBranch: newBranch.value, startSession: startSession.value });
    branch.value = '';
    creating.value = false;
  } catch (err) {
    error.value = err instanceof Error ? err.message : String(err);
  } finally {
    busy.value = false;
  }
}

async function onPrune(): Promise<void> {
  busy.value = true;
  error.value = null;
  try {
    await store.prune(props.repo.id);
  } catch (err) {
    error.value = err instanceof Error ? err.message : String(err);
  } finally {
    busy.value = false;
  }
}

async function onRemove(): Promise<void> {
  error.value = null;
  try {
    await store.removeRepo(props.repo.id);
  } catch (err) {
    error.value = err instanceof Error ? err.message : String(err);
  }
}
</script>
