import {
    FieldBoolean,
    FieldColor,
    FieldDate,
    FieldDatetime,
    FieldEnum,
    FieldNumber,
    FieldSlug,
    FieldString,
    FieldText,
    FieldUrl,
    FieldPath
} from '.';

type PreviewControlInputStringLikeField =
    | FieldString
    | FieldUrl
    | FieldSlug
    | FieldText
    | FieldDate
    | FieldDatetime
    | FieldColor
    | FieldEnum;

export type PreviewControlInputField = PreviewControlInputStringLikeField | FieldNumber | FieldBoolean;

type PreviewControlValue<T> = {
    value?: T;
    onChange?: (value?: T) => void;
};

type PreviewControlBase =
    | (PreviewControlInputStringLikeField & PreviewControlValue<string>)
    | (FieldNumber & PreviewControlValue<number>)
    | (FieldBoolean & PreviewControlValue<boolean>);

export type PreviewControlGlobal = PreviewControlBase & {
    context: 'global';
};

export type PreviewControlField = PreviewControlBase & {
    context: 'field';
    srcType: string;
    srcProjectId: string;
    documentId: string;
    fieldPath?: FieldPath;
};

export type PreviewControl = PreviewControlGlobal | PreviewControlField;
