import { compose, path, pathOr, prop, propOr, when, is, split } from './func'
import { IEvent } from './events'
const payloadOrEmptyObj = propOr({}, 'payload')
export const payload =
(ev: IEvent) => payloadOrEmptyObj(ev)
export const payloadProp = (_prop: string) =>
compose<[IEvent], string, T>(prop(_prop) as any, payloadOrEmptyObj)
export const payloadPropOr = (prop: string, defaultVal: any) =>
compose(propOr(defaultVal, prop), payloadOrEmptyObj)
export const payloadPath = (_path: Array | string) =>
compose<[IEvent], string, T>(path(when(is(String), split('.'))(_path)), payloadOrEmptyObj)
export const payloadPathOr = (path: Array | string, defaultVal: any) =>
compose<[IEvent], string, T>(
pathOr(defaultVal, when(is(String), split('.'))(path)),
payloadOrEmptyObj,
)