/**
 * Google Calendar Node - Version 1.3
 * Discriminator: resource=event, operation=create
 */


interface Credentials {
  googleCalendarOAuth2Api: CredentialReference;
}

/** Add a event to calendar */
export type GoogleCalendarV13EventCreateParams = {
  resource: 'event';
  operation: 'create';
/**
 * Google Calendar to operate on
 * @default {"mode":"list","value":""}
 */
    calendar?: { __rl: true; mode: 'list' | 'id'; value: string; cachedResultName?: string };
/**
 * Start time of the event, use &lt;a href="https://docs.n8n.io/code/cookbook/luxon/" target="_blank"&gt;expression&lt;/a&gt; to set a date, or switch to fixed mode to choose date from widget
 * @default ={{ $now }}
 */
    start?: string | Expression<string>;
/**
 * End time of the event, use &lt;a href="https://docs.n8n.io/code/cookbook/luxon/" target="_blank"&gt;expression&lt;/a&gt; to set a date, or switch to fixed mode to choose date from widget
 * @default ={{ $now.plus(1, 'hour') }}
 */
    end?: string | Expression<string>;
/**
 * Use Default Reminders
 * @default true
 */
    useDefaultReminders?: boolean | Expression<boolean>;
/**
 * Additional Fields
 * @default {}
 */
    additionalFields?: {
    /** Whether the event is all day or not
     * @default no
     */
    allday?: 'yes' | 'no' | Expression<string>;
    /** The attendees of the event. Multiple ones can be separated by comma.
     */
    attendees?: string | Expression<string> | PlaceholderValue;
    /** The color of the event. Choose from the list, or specify an ID using an &lt;a href="https://docs.n8n.io/code/expressions/"&gt;expression&lt;/a&gt;.
     */
    color?: string | Expression<string>;
    /** Creates a conference link (Hangouts, Meet etc) and attaches it to the event
     * @default {}
     */
    conferenceDataUi?: {
        /** Conference Link
     */
    conferenceDataValues?: {
      /** Choose from the list, or specify an ID using an &lt;a href="https://docs.n8n.io/code/expressions/"&gt;expression&lt;/a&gt;
       */
      conferenceSolution?: string | Expression<string>;
    };
  };
    /** Description
     */
    description?: string | Expression<string> | PlaceholderValue;
    /** Whether attendees other than the organizer can invite others to the event
     * @default true
     */
    guestsCanInviteOthers?: boolean | Expression<boolean>;
    /** Whether attendees other than the organizer can modify the event
     * @default false
     */
    guestsCanModify?: boolean | Expression<boolean>;
    /** Whether attendees other than the organizer can see who the event's attendees are
     * @default true
     */
    guestsCanSeeOtherGuests?: boolean | Expression<boolean>;
    /** Opaque identifier of the event
     */
    id?: string | Expression<string> | PlaceholderValue;
    /** Geographic location of the event as free-form text
     */
    location?: string | Expression<string> | PlaceholderValue;
    /** The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned.
     * @default 0
     */
    maxAttendees?: number | Expression<number>;
    /** Repeat Frequency
     */
    repeatFrecuency?: 'Daily' | 'weekly' | 'monthly' | 'yearly' | Expression<string>;
    /** Repeat How Many Times?
     * @default 1
     */
    repeatHowManyTimes?: number | Expression<number>;
    /** Repeat Until
     */
    repeatUntil?: string | Expression<string>;
    /** Recurrence rule. When set, the parameters Repeat Frequency, Repeat How Many Times and Repeat Until are ignored.
     */
    rrule?: string | Expression<string> | PlaceholderValue;
    /** Whether to send notifications about the creation of the new event
     */
    sendUpdates?: 'all' | 'externalOnly' | 'none' | Expression<string>;
    /** Whether the event blocks time on the calendar
     * @default opaque
     */
    showMeAs?: 'transparent' | 'opaque' | Expression<string>;
    /** Title of the event
     */
    summary?: string | Expression<string> | PlaceholderValue;
    /** Visibility of the event
     * @default default
     */
    visibility?: 'confidential' | 'default' | 'private' | 'public' | Expression<string>;
  };
/**
 * If the event doesn't use the default reminders, this lists the reminders specific to the event
 * @displayOptions.show { useDefaultReminders: [false] }
 * @default {}
 */
    remindersUi?: {
        /** Reminder
     */
    remindersValues?: Array<{
      /** Method
       */
      method?: 'email' | 'popup' | Expression<string>;
      /** Minutes Before
       * @default 0
       */
      minutes?: number | Expression<number>;
    }>;
  };
};

export type GoogleCalendarV13EventCreateOutput = {
  created?: string;
  creator?: {
    email?: string;
    self?: boolean;
  };
  description?: string;
  end?: {
    dateTime?: string;
    timeZone?: string;
  };
  etag?: string;
  eventType?: string;
  htmlLink?: string;
  iCalUID?: string;
  id?: string;
  kind?: string;
  organizer?: {
    email?: string;
    self?: boolean;
  };
  reminders?: {
    useDefault?: boolean;
  };
  sequence?: number;
  start?: {
    dateTime?: string;
    timeZone?: string;
  };
  status?: string;
  summary?: string;
  updated?: string;
};

export type GoogleCalendarV13EventCreateNode = {
  type: 'n8n-nodes-base.googleCalendar';
  version: 1.3;
  credentials?: Credentials;
  config: NodeConfig<GoogleCalendarV13EventCreateParams>;
  output?: Items<GoogleCalendarV13EventCreateOutput>;
};