export * as PromptInput from "./prompt-input"

import { Schema } from "effect"
import { AgentAttachment, Origin, Source } from "./prompt"
import { optional, statics } from "./schema"

export interface FileAttachment extends Schema.Schema.Type<typeof FileAttachment> {}
export const FileAttachment = Schema.Struct({
  uri: Schema.String,
  name: Schema.String.pipe(optional),
  description: Schema.String.pipe(optional),
  source: Source.pipe(optional),
})
  .annotate({ identifier: "PromptInput.FileAttachment" })
  .pipe(
    statics((schema) => ({
      create: (input: FileAttachment) => schema.make(input),
    })),
  )

export interface Prompt extends Schema.Schema.Type<typeof Prompt> {}
export const Prompt = Schema.Struct({
  text: Schema.String,
  files: Schema.Array(FileAttachment).pipe(optional),
  agents: Schema.Array(AgentAttachment).pipe(optional),
  // Provenance of this input (the Messenger gateway sets it; local composer omits it — default
  // "user"). Passed straight through to the durable Prompt (session.ts resolvePrompt).
  origin: Origin.pipe(optional),
}).annotate({ identifier: "PromptInput" })
