import {DocAction} from 'app/common/DocActions';

/**
 * State related to a request for assistance.
 *
 * If an AssistanceResponse contains state, that state can be
 * echoed back in an AssistanceRequest to continue a "conversation."
 *
 * Ideally, the state should not be modified or relied upon
 * by the client, so as not to commit too hard to a particular
 * model at this time (it is a bit early for that).
 */
export interface AssistanceState {
  messages?: Array<{
    role: string;
    content: string;
  }>;
}

/**
 * Currently, requests for assistance always happen in the context
 * of the column of a particular table.
 */
export interface FormulaAssistanceContext {
  type: 'formula';
  tableId: string;
  colId: string;
}

export type AssistanceContext = FormulaAssistanceContext;

/**
 * A request for assistance.
 */
export interface AssistanceRequest {
  context: AssistanceContext;
  state?: AssistanceState;
  text: string;
  regenerate?: boolean;  // Set if there was a previous request
                         // and response that should be omitted
                         // from history, or (if available) an
                         // alternative response generated.
}

/**
 * A response to a request for assistance.
 * The client should preserve the state and include it in
 * any follow-up requests.
 */
export interface AssistanceResponse {
  suggestedActions: DocAction[];
  state?: AssistanceState;
  // If the model can be trusted to issue a self-contained
  // markdown-friendly string, it can be included here.
  reply?: string;
}
