export interface User {
  id: number;
  username: string;
  email: string;
  displayName: string | null;
  bio: string | null;
  createdAt: string;
}

export interface Repository {
  id: number;
  name: string;
  description: string | null;
  visibility: "public" | "private";
  defaultChannel: string;
  owner: Pick<User, "id" | "username" | "displayName">;
  createdAt: string;
  updatedAt: string;
}

export interface ChangeMeta {
  hash: string;
  message: string;
  authors: Array<{ name: string; email?: string }>;
  timestamp: string;
}

export interface TreeEntry {
  name: string;
  kind: "file" | "dir";
  path: string;
}

export interface ChangeDetail extends ChangeMeta {
  diff: string;
}