"""Configuration Claude Code (sans sessions ni caches)."""

from __future__ import annotations

from osx_backup.context import Context
from osx_backup.modules.base import Inventory, Module, ModuleResult, ProgressReporter, register
from osx_backup.modules.pathset import PathItem, backup_paths, inventory_paths, restore_paths

FIXED_ITEMS: list[PathItem] = [
    PathItem(".claude/settings.json"),
    PathItem(".claude/CLAUDE.md"),
    PathItem(".claude/RTK.md"),
    PathItem(".claude/statusline.sh"),
    PathItem(".claude/hooks"),
    PathItem(".claude/skills"),
    PathItem(".claude/plugins", ("cache",)),
]


def claude_items(ctx: Context) -> list[PathItem]:
    """Les entrées fixes, plus la mémoire de chaque projet (jamais ses sessions)."""
    items = list(FIXED_ITEMS)
    projects = ctx.home / ".claude" / "projects"
    if projects.is_dir():
        for memory in sorted(projects.glob("*/memory")):
            if memory.is_dir():
                items.append(PathItem(memory.relative_to(ctx.home).as_posix()))
    return items


@register
class ClaudeModule(Module):
    name = "claude"
    description = "Claude Code : settings, hooks, skills, plugins, mémoires projet"
    order = 60

    def inventory(self, ctx: Context) -> Inventory:
        if not (ctx.home / ".claude").is_dir():
            return Inventory(available=False, reason="~/.claude absent")
        return inventory_paths(ctx, claude_items(ctx))

    def backup(self, ctx: Context, progress: ProgressReporter) -> ModuleResult:
        return backup_paths(ctx, self.name, claude_items(ctx), progress)

    def restore(self, ctx: Context, progress: ProgressReporter) -> ModuleResult:
        return restore_paths(ctx, self.name, progress)
