import { requireCapability, type MarketingAdapter } from './index.js'
import type { Segment, SegmentFilter, SelfManagedStore } from './self-managed.js'

export type { Segment, SegmentFilter } from './self-managed.js'

export type SegmentsCapable = {
  createSegment(def: { name: string; listId: string; filter: SegmentFilter }): Promise<Segment>
  listSegments(listId?: string): Promise<Segment[]>
}

export function asSegmentsCapable(adapter: MarketingAdapter): SegmentsCapable {
  return adapter as MarketingAdapter & SegmentsCapable
}

export async function createSegment(
  adapter: MarketingAdapter,
  def: { name: string; listId: string; filter: SegmentFilter },
): Promise<Segment> {
  requireCapability(adapter, 'segments')
  return asSegmentsCapable(adapter).createSegment(def)
}

export async function listSegments(
  adapter: MarketingAdapter,
  listId?: string,
): Promise<Segment[]> {
  requireCapability(adapter, 'segments')
  return asSegmentsCapable(adapter).listSegments(listId)
}
