import PluginsLoader from '@epicformbuilder/common/services/PluginsLoader'

// Form Fields
import title              from '@epicformbuilder/admin/editor/components/Title/Defaults'
import subtitle           from '@epicformbuilder/admin/editor/components/Subtitle/Defaults'
import blank              from '@epicformbuilder/admin/editor/components/Blank/Defaults'
import freeText           from '@epicformbuilder/admin/editor/components/FreeText/Defaults'
import text               from '@epicformbuilder/admin/editor/components/Text/Defaults'
import email              from '@epicformbuilder/admin/editor/components/Email/Defaults'
import phone              from '@epicformbuilder/admin/editor/components/Phone/Defaults'
import paragraph          from '@epicformbuilder/admin/editor/components/Paragraph/Defaults'
import checkbox           from '@epicformbuilder/admin/editor/components/Checkbox/Defaults'
import radio              from '@epicformbuilder/admin/editor/components/Radio/Defaults'
import select             from '@epicformbuilder/admin/editor/components/Select/Defaults'
import date               from '@epicformbuilder/admin/editor/components/Date/Defaults'
import time               from '@epicformbuilder/admin/editor/components/Time/Defaults'
import confirm            from '@epicformbuilder/admin/editor/components/Confirm/Defaults'
import submit             from '@epicformbuilder/admin/editor/components/Submit/Defaults'
import fullName           from '@epicformbuilder/admin/editor/components/FullName/Defaults'
import firstName          from '@epicformbuilder/admin/editor/components/FirstName/Defaults'
import lastName           from '@epicformbuilder/admin/editor/components/LastName/Defaults'
import address1           from '@epicformbuilder/admin/editor/components/Address1/Defaults'
import address2           from '@epicformbuilder/admin/editor/components/Address2/Defaults'
import country            from '@epicformbuilder/admin/editor/components/Country/Defaults'
import state              from '@epicformbuilder/admin/editor/components/State/Defaults'
import city               from '@epicformbuilder/admin/editor/components/City/Defaults'
import postCode           from '@epicformbuilder/admin/editor/components/PostCode/Defaults'

// Form Actions
import successMessage     from '@epicformbuilder/admin/editor/components/SuccessMessage/Defaults'
import failureMessage     from '@epicformbuilder/admin/editor/components/FailureMessage/Defaults'
import processingMessage  from '@epicformbuilder/admin/editor/components/ProcessingMessage/Defaults'
import notification       from '@epicformbuilder/admin/editor/components/Notification/Defaults'

type ComponentDefaults = { properties: Record<string, any>, layout?: Record<string, any> }

// Core components only. Add-on defaults come from the add-on registry.
const defaults: Record<string, ComponentDefaults> = {
  // Form Fields
  Title: title,
  Subtitle: subtitle,
  Blank: blank,
  FreeText: freeText,

  Text: text,
  Email: email,
  Phone: phone,
  Paragraph: paragraph,
  Checkbox: checkbox,
  Radio: radio,
  Select: select,
  Date: date,
  Time: time,
  Confirm: confirm,
  Submit: submit,

  FullName: fullName,
  FirstName: firstName,
  LastName: lastName,
  Address1: address1,
  Address2: address2,
  Country: country,
  State: state,
  City: city,
  PostCode: postCode,

  // Form Actions
  SuccessMessage: successMessage,
  FailureMessage: failureMessage,
  ProcessingMessage: processingMessage,
  Notification: notification,
}

export const getDefaults = ( name: string ): ComponentDefaults =>
  defaults[name] ?? PluginsLoader.getEditorPart( name )?.defaults ?? { properties: {} }

export default defaults
