import type { CanonicalMessage } from "../../model/index.js";
import type { PilotDeckHookEvent } from "../../extension/hooks/protocol/events.js";
import type { PilotDeckHookBaseInput } from "../../extension/hooks/protocol/input.js";
import type { PilotDeckHookEffect, PilotDeckLifecycleError } from "./effects.js";

export type LifecycleDispatchInput = {
  event: PilotDeckHookEvent;
  baseInput: PilotDeckHookBaseInput;
  payload?: Record<string, unknown>;
  matchQuery?: string;
  signal?: AbortSignal;
  env?: NodeJS.ProcessEnv;
};

export type LifecycleDispatchResult = {
  effects: PilotDeckHookEffect[];
  messages: CanonicalMessage[];
  events: unknown[];
  blockingErrors: PilotDeckLifecycleError[];
  nonBlockingErrors: PilotDeckLifecycleError[];
};

export function emptyLifecycleDispatchResult(): LifecycleDispatchResult {
  return {
    effects: [],
    messages: [],
    events: [],
    blockingErrors: [],
    nonBlockingErrors: [],
  };
}