export type Command = { id: string; title: string; version: number };
export type State = { title: string; version: number };
const database = new Promise<IDBDatabase>((resolve, reject) => {
  const request = indexedDB.open('appfabrik-outbox-learning', 1);
  request.onupgradeneeded = () => request.result.createObjectStore('commands', { keyPath: 'id' });
  request.onsuccess = () => resolve(request.result);
  request.onerror = () => reject(request.error);
});
export async function pending(): Promise<Command[]> {
  const db = await database;
  return new Promise((resolve, reject) => {
    const request = db.transaction('commands').objectStore('commands').getAll();
    request.onsuccess = () => resolve(request.result);
    request.onerror = () => reject(request.error);
  });
}
export async function write(command: Command | null, remove?: string) {
  const db = await database;
  await new Promise<void>((resolve, reject) => {
    const transaction = db.transaction('commands', 'readwrite');
    const store = transaction.objectStore('commands');
    if (remove) store.delete(remove);
    if (command) store.put(command);
    transaction.oncomplete = () => resolve();
    transaction.onerror = () => reject(transaction.error);
    transaction.onabort = () => reject(transaction.error);
  });
}
export function parseState(value: unknown): State {
  if (typeof value !== 'object' || value === null || !('title' in value) ||
      typeof value.title !== 'string' || !('version' in value) ||
      typeof value.version !== 'number' || !Number.isSafeInteger(value.version)) {
    throw new Error('Invalid server state');
  }
  return { title: value.title, version: value.version };
}
export const api = 'http://127.0.0.1:8283';
