import { LayoutContext, LayoutType } from 'src/models';
import LastLogHistory from 'src/pages/captaciones/LastLogHistory.vue';
import LogHistory from 'src/pages/captaciones/LogHistory.vue';
import LastLogHistoryCliente from 'src/pages/clientes/LastLogHistory.vue';
import ClienteLogHistory from 'src/pages/clientes/LogHistory.vue';
import PropiedadCardView from 'src/pages/productos/widgets/InmuebleCardView.vue';
import ProductoCardGeneric from 'src/pages/productos/widgets/ProductoCardGeneric.vue';
import { Component } from 'vue';
import _DataWrapper, { DataWrapperSchema } from './_DataWrapper.vue';
import CaptacionDiscardReasonCard from './CaptacionDiscardReasonCard.vue';
import CaptacionPasswordLinkCard from './captaciones/CaptacionPasswordLinkCard.vue';
import ContactoCaptaciones from './captaciones/ContactoCaptaciones.vue';
import DynamicCaptacionUserDocument from './captaciones/DynamicCaptacionUserDocument.vue';
import UserCaptacionesList from './captaciones/UserCaptacionesList.vue';
import CaptacionStateUpdater from './CaptacionStateUpdater.vue';
import ComisionesClienteTable from './cliente/ComisionesClienteTable.vue';
import LiquidacionesClienteTable from './cliente/LiquidacionesClienteTable.vue';
import ReglasLiquidacionClienteTable from './cliente/ReglasLiquidacionClienteTable.vue';
import SituacionesLiquidacionClienteTable from './cliente/SituacionesLiquidacionClienteTable.vue';
import UserAccess from './cliente/UserAccess.vue';
import ClienteDocumentsResume from './ClienteDocumentsResume.vue';
import ClienteStateCard from './ClienteStateCard.vue';
import DynamicDocument from './components/DynamicDocument.vue';
import DynamicStateSelector, { DynamicStateSelectorPropsSchema } from './components/DynamicStateSelector.vue';
import ImagesGallery from './components/ImagesGallery.vue';
import SignablePdfDocument from './components/SignablePdfDocument.vue';
import ComunicacionChat from './ComunicacionChat.vue';
import ContactBusinessInfoCard from './ContactBusinessInfoCard.vue';
import ContactBusinessNameCard from './ContactBusinessNameCard.vue';
import ContactComunicationCard from './ContactComunicationCard.vue';
import ContactDocuments from './ContactDocuments.vue';
import ContactGuaranteeCardList from './ContactGuaranteeCardList.vue';
import ContactInfo from './ContactInfo.vue';
import ContactNameCard from './ContactNameCard.vue';
import ContactQuestionsStateCard from './ContactQuestionsStateCard.vue';
import ContactsDebtCardList from './ContactsDebtCardList.vue';
import ContactsIncomeCardList from './ContactsIncomeCardList.vue';
import ContactsList from './ContactsList.vue';
import Contract from './Contract.vue';
import DelegacionDatosCard from './DelegacionDatosCard.vue';
import DocumentCards, { DocumentCardsPropsSchema } from './DocumentCards.vue';
import DocumentsResume from './DocumentsResume.vue';
import ExpensesList from './ExpensesList.vue';
import FaceappAcometidaNaturgyInfoCard from './faceapp/FaceappAcometidaNaturgyInfoCard.vue';
import FaceappCaptadorCard from './faceapp/FaceappCaptadorCard.vue';
import FaceappContactInfo from './faceapp/FaceappContactInfo.vue';
import FaceappHirarchyUserCard from './faceapp/FaceappHirarchyUserCard.vue';
import FaceappIdExternoCard from './faceapp/FaceappIdExternoCard.vue';
import FaceappNaturgyInfoCard from './faceapp/FaceappNaturgyInfoCard.vue';
import FaceappUserAccessControl from './faceapp/FaceappUserAccessControl.vue';
import FaceappUserRolCard from './faceapp/FaceappUserRolCard.vue';
import SeduviDialog from './faceapp/naturgy/SeduviDialog.vue';
import SolicitudNaturgyMobileCard from './faceapp/naturgy/SolicitudNaturgyMobileCard.vue';
import QrHeader from './faceapp/QrHeader.vue';
import TitleSection from './faceapp/TitleSection.vue';
import TPVLocation from './faceapp/TPVLocation.vue';
import FincaTieList from './fincaWidgets/FincaTieList.vue';
import FormAnswers from './FormAnswers.vue';
import BrokerFields from './hipotecaWidgets/BrokerFields.vue';
import BrokerPresentationCard from './hipotecaWidgets/BrokerPresentationCard.vue';
import HipotecaConfig from './hipotecaWidgets/HipotecaConfig.vue';
import HipotecaDebtCard from './hipotecaWidgets/HipotecaDebtCard.vue';
import HipotecaGuaranteeCard from './hipotecaWidgets/HipotecaGuaranteeCard.vue';
import HipotecaHoldersCard from './hipotecaWidgets/HipotecaHoldersCard.vue';
import HipotecaPropertyDetail from './hipotecaWidgets/HipotecaPropertyDetail.vue';
import HipotecaSimulationCard from './hipotecaWidgets/HipotecaSimulationCard.vue';
import HipotecaSummaryCard from './hipotecaWidgets/HipotecaSummaryCard.vue';
import HipotecaVinculacionesCard from './hipotecaWidgets/HipotecaVinculacionesCard.vue';
import HoldersList from './hipotecaWidgets/HoldersList.vue';
import HipotecaTiesList from './hipotecaWidgets/tie/HipotecaTiesList.vue';
import TPVTiesList from './hipotecaWidgets/tie/TPVTiesList.vue';
import HirarchyUsersCard from './HirarchyUsersCard.vue';
import IncidentList from './IncidentList.vue';
import IncidentNotificationsCard from './IncidentNotificationsCard.vue';
import CampaniaQr from './invitation/CampaniaQr.vue';
import LandingInvitation from './invitation/LandingInvitation.vue';
import UserInvitationBtn from './invitation/UserInvitationBtn.vue';
import LinvermediaProductDialogDetallePack from './linvermedia/LinvermediaProductDialogDetallePack.vue';
import LinverMediaPantallaInfoCard from './linvermedia/PantallaInfoCard.vue';
import PedidoDetail from './linvermedia/PedidoDetail.vue';
import ProductDetail from './linvermedia/ProductDetail.vue';
import LLamadasCard, { LlamadasCardPropsSchema } from './llamadas/LLamadasCard.vue';
import LlamadasList, { LlamadasListPropsSchema } from './llamadas/LlamadasList.vue';
import ContactoLocationCard from './location/ContactoLocationCard.vue';
import PedidoLocationCard from './location/PedidoLocationCard.vue';
import ProductoLocationCard from './location/ProductoLocationCard.vue';
import ProductoPedLocationCard from './location/ProductoPedLocationCard.vue';
import ProductPedProductLocationCard from './location/ProductPedProductLocationCard.vue';
import QrCaptacionesAccess from './marketing/QrCaptacionesAccess.vue';
import PantallaDescriptionCard from './mastertecWidgets/PantallaDescriptionCard.vue';
import PantallaRequestInfoCard from './mastertecWidgets/PantallaRequestInfoCard.vue';
import MeetsCard from './meets/MeetsCard.vue';
import MockCardWidget from './MockCardWidget.vue';
import PaqueteTelefoniaInfoCard from './paqueteTelefonia/PaqueteTelefoniaInfoCard.vue';
import PartnerDataCard, { PartnerDataCardPropsSchema } from './partners/PartnerDataCard.vue';
import PerdmPaqueteTelefoniaInfoCard from './perdm/paqueteTelefonia/PaqueteTelefoniaInfoCard.vue';
import PerdmContactCard from './perdm/PerdmContactCard.vue';
import SolicitudPaqueteMobileCard from './perdm/SolicitudPaqueteMobileCard.vue';
import ProductAndHoldersDocuments from './ProductAndHoldersDocuments.vue';
import ProductAndHoldersDocumentsCard from './ProductAndHoldersDocumentsCard.vue';
import ProductAndProductHoldersDocumentsResume from './ProductAndProductHoldersDocumentsResume.vue';
import ProductCampanias from './ProductCampanias.vue';
import ProductCarousel from './ProductCarousel.vue';
import ProductDescriptionCard from './ProductDescriptionCard.vue';
import ProductFincaDetail from './ProductFincaDetail.vue';
import ProductFincaSummary from './ProductFincaSummary.vue';
import ProductHolderResume from './ProductHolderResume.vue';
import ProductHoldersBankAccountsResume from './ProductHoldersBankAccountsResume.vue';
import ProductHoldersCard from './ProductHoldersCard.vue';
import ProductImagesCard from './ProductImagesCard.vue';
import ProductNameCard from './ProductNameCard.vue';
import ProductoPropsCard from './ProductoPropsCard.vue';
import ProductDocumentCards from './productos/DocumentCards.vue';
import ProductoProveedores from './productos/ProductoProveedores.vue';
import ProductStateCard from './ProductStateCard.vue';
import ProductTags from './ProductTags.vue';
import InmuebleAttributesCard from './propiedades/InmuebleAttributesCard.vue';
import InmuebleContactoAttributesCard from './propiedades/InmuebleContactoAttributesCard.vue';
import InmuebleSummaryCard from './propiedades/InmuebleSummaryCard.vue';
import StatusInmuebleCard from './propiedades/StatusInmuebleCard.vue';
import TipoInmuebleCard from './propiedades/TipoInmuebleCard.vue';
import PropsCard, { PropsCardPropsSchema } from './PropsCard.vue';
import ImportacionesLayouts from './proveedor/ImportacionesLayouts.vue';
import ProveedorContacto from './proveedor/ProveedorContacto.vue';
import ProveedorProductos from './proveedor/ProveedorProductos.vue';
import StateCardWidget from './StateCardWidget.vue';
import TiesSummary from './TiesSummary.vue';
import TPVRequestInfoCard from './tpv/TPVRequestInfoCard.vue';
import UrbanEventsAccessScanner from './urban_events/UrbanEventsAccessScanner.vue';
import UrbanEventsAsignacionPuesto from './urban_events/UrbanEventsAsignacionPuesto.vue';
import UrbanEventsContactCard from './urban_events/UrbanEventsContactCard.vue';
import UrbanEventsFichajes from './urban_events/UrbanEventsFichajes.vue';
import UrbanEventsInvitaciones from './urban_events/UrbanEventsInvitaciones.vue';
import UrbanEventsProductCard from './urban_events/UrbanEventsProductCard.vue';
import UrbanEventsProductResumeCard from './urban_events/UrbanEventsProductResumeCard.vue';
import UrbanEventsQR from './urban_events/UrbanEventsQR.vue';
import UrbanEventsSolicitudCard from './urban_events/UrbanEventsSolicitudCard.vue';
import UsuarioLocationCard from './usuario/ContactoLocationCard.vue';
import UserDocumentCards from './usuario/DocumentCards.vue';
import DynamicUserDocument from './usuario/DynamicDocument.vue';
import PerfilUsuarioDialog from './usuario/PerfilUsuarioDialog.vue';
import UserStateCard from './usuario/StateCard.vue';
import UserDocumentsResume from './usuario/UserDocumentsResume.vue';
import UserIncidentNotificationsCard from './usuario/UserIncidentNotificationsCard.vue';
import UserList from './usuario/UserList.vue';
import UsuarioAccessControl from './usuario/UsuarioAccessControl.vue';

export default {
  data_wrapper: {
    description: 'Wrapper para cargar data asíncrona en widgets empaquetados',
    component: _DataWrapper,
    help: JSON.stringify(DataWrapperSchema.parse({}), null, 2),
  },
  cliente_state_card: {
    description: 'Tarjeta de estado para cliente',
    component: ClienteStateCard,
    layoutContexts: ['cliente'],
  },
  cliente_documents_resume: {
    description: 'Tarjeta de resumen de documentos para cliente',
    component: ClienteDocumentsResume,
    layoutContexts: ['cliente'],
  },
  cliente_last_log: {
    description: 'Tarjeta último seguimiento para cliente',
    component: LastLogHistoryCliente,
    layoutContexts: ['cliente'],
  },
  cliente_user_access: {
    description: 'Tarjeta datos de acceso cliente',
    component: UserAccess,
    layoutContexts: ['cliente'],
  },
  urban_events_contact_card: {
    description: 'Tarjeta de contacto para urban events',
    component: UrbanEventsContactCard,
    layoutContexts: ['captacion', 'usuario'],
  },
  usuario_resumen_documentos: {
    description: 'Resumen de documentos usuario',
    component: UserDocumentsResume,
    layoutContexts: ['usuario'],
  },
  usuario_resumen_de_documentos: {
    description: 'Resumen de incidencias usuario',
    component: UserIncidentNotificationsCard,
    layoutContexts: ['usuario'],
  },
  usuario_access_control: {
    description: 'Control de acceso de usuario',
    component: UsuarioAccessControl,
  },
  urban_events_invitations: {
    description: 'Tabla de invitaciones a eventos',
    component: UrbanEventsInvitaciones,
  },
  urban_events_fichajes: {
    description: 'Tabla de fichajes del evento Urban Events',
    component: UrbanEventsFichajes,
  },
  urban_events_qr: {
    description: 'QR urban events',
    component: UrbanEventsQR,
  },
  urban_events_asignacion_puesto: {
    description: 'Asignacion de puesto Urban Events',
    component: UrbanEventsAsignacionPuesto,
    layoutContexts: ['captacion'],
    layoutTypes: ['detalle'],
  },
  captacion_seguimiento: {
    description: 'Seguimiento captación',
    component: LogHistory,
    layoutContexts: ['captacion'],
    layoutTypes: ['detalle'],
  },
  captacion_ultimo_seguimiento: {
    description: 'Último seguimiento captación card',
    component: LastLogHistory,
    layoutContexts: ['captacion'],
    layoutTypes: ['detalle'],
  },
  urban_events_solicitud_card: {
    description: 'Solicitud versión mobile',
    component: UrbanEventsSolicitudCard,
    layoutContexts: ['captacion'],
    layoutTypes: ['tabla'],
  },
  captacion_state_updater: {
    description: 'Botones de actualización estado captación',
    component: CaptacionStateUpdater,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
    help: `{
      actions: {
        label: string,
        value: string,
        confirmationText?: string,
      }[],
      show: SerializedFunction
    }`,
  },
  dynamic_state_updater: {
    description: 'Selector de estado dinamico',
    component: DynamicStateSelector,
    layoutTypes: ['detalle'],
    help: JSON.stringify(DynamicStateSelectorPropsSchema.parse({}), null, 2),
  },
  mock_card: {
    description: 'Tarjeta mock',
    component: MockCardWidget,
  },
  state_card: {
    description: 'Tarjeta de estado',
    component: StateCardWidget,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  discard_reason_card: {
    description: 'Tarjeta motivo rechazo',
    component: CaptacionDiscardReasonCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  broker_presentation_card: {
    description: 'Tarjeta de broker',
    component: BrokerPresentationCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  faceapp_user_rol_card: {
    description: 'Tarjeta de rol de usuario faceapp',
    component: FaceappUserRolCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  main_hipoteca_card: {
    description: 'Tarjeta de hipoteca',
    component: HipotecaSummaryCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  main_inmueble_card: {
    description: 'Tarjeta de inmueble',
    component: InmuebleSummaryCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  holder_card: {
    description: 'Tarjeta de titular',
    component: HipotecaHoldersCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  pantalla_request_info_card: {
    description: 'Tarjeta de petición de pantalla',
    component: PantallaRequestInfoCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  tpv_info_card: {
    description: 'Tarjeta de TPV',
    component: TPVRequestInfoCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  paquete_telefonia_info_card: {
    description: 'Tarjeta de Paquete de teléfonia',
    component: PaqueteTelefoniaInfoCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  perdm_paquete_telefonia_info_card: {
    description: 'Tarjeta de Paquete de teléfonia IZZI (perdm)',
    component: PerdmPaqueteTelefoniaInfoCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  pantalla_description_card: {
    description: 'Tarjeta de descripción de pantalla',
    component: PantallaDescriptionCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  contact_business_name_card: {
    description: 'Tarjeta razón social del contacto',
    component: ContactBusinessNameCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  contact_business_info_card: {
    description: 'Tarjeta de datos de contacto de empresa',
    component: ContactBusinessInfoCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  linvermedia_pantalla_info_card: {
    description: 'Tarjeta de datos de pantalla de linvermedia',
    component: LinverMediaPantallaInfoCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  hipoteca_simulation_card: {
    description: 'Simulador de cuota mensual hipoteca',
    component: HipotecaSimulationCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  hipoteca_debt_card: {
    description: 'Resumen deudas hipoteca',
    component: HipotecaDebtCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  hipoteca_garant_card: {
    description: 'Resumen garantías hipoteca',
    component: HipotecaGuaranteeCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  contact_name_card: {
    description: 'Tarjeta de contacto',
    component: ContactNameCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion', 'partner'],
  },
  contact_comunication_card: {
    description: 'Tarjeta de comunicacion',
    component: ContactComunicationCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  product_summary: {
    description: 'Tarjeta de atributos de producto',
    component: ProductoPropsCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion', 'producto'],
  },
  props_card: {
    description: 'Tarjeta genérica de atributos (props)',
    component: PropsCard,
    layoutTypes: ['detalle'],
    help: JSON.stringify(PropsCardPropsSchema.parse({}), null, 2),
  },
  linvermedia_product: {
    description: 'Detalle de producto linvermedia',
    component: ProductDetail,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion', 'producto'],
  },
  linvermedia_pedido: {
    description: 'Detalle de pedido linvermedia',
    component: PedidoDetail,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion', 'producto'],
  },
  linvermedia_product_dialog_detalle_pack: {
    description: 'Producto dialog detalle pack linvermedia',
    component: LinvermediaProductDialogDetallePack,
    layoutTypes: ['detalle'],
  },

  product_finca_detail: {
    description: 'Detalle de finca',
    component: ProductFincaDetail,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion', 'producto'],
  },
  ties_summary: {
    description: 'Resumen de propuesta TIE',
    component: TiesSummary,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  product_holders_summary: {
    description: 'Resumen de titulares de producto',
    component: ProductHolderResume,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  documents_summary: {
    description: 'Resumen de documentos',
    component: DocumentsResume,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  product_and_product_holders_documents_summary: {
    description: 'Resumen de documentos de producto y sus titulares',
    component: ProductAndProductHoldersDocumentsResume,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  product_holders_bank_accounts_summary: {
    description: 'Resumen de cuentas bancarias de titulares de producto',
    component: ProductHoldersBankAccountsResume,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  product_finca_summary: {
    description: 'Resumen de finca',
    component: ProductFincaSummary,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  contact_questions_summary: {
    description: 'Resumen cuestionario',
    component: ContactQuestionsStateCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  product_images_card: {
    description: 'Tarjeta de imágenes de producto',
    component: ProductImagesCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  product_ped_location: {
    description: 'Tarjeta de ubicación de línea de pedido',
    component: ProductoPedLocationCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  pedido_location: {
    description: 'Tarjeta de ubicación de pedido',
    component: PedidoLocationCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  product_ped_product_location: {
    description: 'Tarjeta de ubicación de pedido de producto',
    component: ProductPedProductLocationCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  contact_location: {
    description: 'Tarjeta de ubicación de contacto',
    component: ContactoLocationCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion', 'delegacion', 'partner'], //, 'usuario'],
  },
  product_location: {
    description: 'Tarjeta de ubicación de producto',
    component: ProductoLocationCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion', 'producto'],
  },
  product_holders_card: {
    description: 'Tarjeta de titulares de producto',
    component: ProductHoldersCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  documents_card: {
    description: 'Tarjeta de documentos',
    component: DocumentCards,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion', 'usuario', 'cliente'],
    help: JSON.stringify(DocumentCardsPropsSchema.parse({}), null, 2),
  },
  contacto_captaciones_card: {
    description: 'Tarjeta de captaciones del contacto',
    component: ContactoCaptaciones,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion', 'usuario', 'cliente'],
    help: JSON.stringify(DocumentCardsPropsSchema.parse({}), null, 2),
  },
  cliente_log: {
    description: 'Logs del cliente',
    component: ClienteLogHistory,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion', 'usuario', 'cliente'],
    help: JSON.stringify(DocumentCardsPropsSchema.parse({}), null, 2),
  },
  product_documents_card: {
    description: 'Tarjetas de documentación de producto',
    component: ProductDocumentCards,
    layoutTypes: ['detalle'],
    layoutContexts: ['producto'],
  },
  product_and_holders_documents_card: {
    description: 'Tarjeta de documentos de producto y titulares de producto',
    component: ProductAndHoldersDocumentsCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  contact_documents: {
    description: 'Listado de documentos del contacto',
    component: ContactDocuments,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  product_and_holders_documents: {
    description: 'Listado de documentos de producto y titulares de producto',
    component: ProductAndHoldersDocuments,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  finca_tie_list: {
    description: 'Listado de cotización para finca',
    component: FincaTieList,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  incident_notifications: {
    description: 'Notificacion de incidencias',
    component: IncidentNotificationsCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  incident_list: {
    description: 'Listado de incidencias',
    component: IncidentList,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  contacts_income_card_list: {
    description: 'Listado de ingresos de titulares',
    component: ContactsIncomeCardList,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  contacts_guarantee_card_list: {
    description: 'Listado de garantias de titulares',
    component: ContactGuaranteeCardList,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  contacts_debt_card_list: {
    description: 'Listado de deudas de titulares',
    component: ContactsDebtCardList,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  contact_info: {
    description: 'Datos del contacto',
    component: ContactInfo,
    layoutTypes: ['detalle'],
    layoutContexts: ['usuario', 'captacion', 'delegacion', 'cliente', 'partner'],
  },
  form_answers: {
    description: 'Respuestas formulario landing',
    component: FormAnswers,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  holders_list: {
    description: 'Lista de titulares con ingresos y deudas (hipotecas)',
    component: HoldersList,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  hipoteca_ties_list: {
    description: 'Lista de propuestas tie para hipotecas',
    component: HipotecaTiesList,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  tpv_ties_list: {
    description: 'Lista de propuestas tie para TPV',
    component: TPVTiesList,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  hipoteca_vinculaciones_card: {
    description: 'Tarjeta de vinculaciones rechazadas para hipotecas',
    component: HipotecaVinculacionesCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  hipoteca_property_detail: {
    description: 'Detalle inmueble hipoteca',
    component: HipotecaPropertyDetail,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  hipoteca_config: {
    description: 'Configuración hipoteca',
    component: HipotecaConfig,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  gestion_comunicacion_gitsi: {
    description: 'Comunicaciones en Jitsi',
    component: MeetsCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  gestion_comunicacion_chat: {
    description: 'Comunicaciones en Chat',
    component: ComunicacionChat,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  expenses: {
    description: 'Lista de gastos',
    component: ExpensesList,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  broker_fields: {
    description: 'Datos broker',
    component: BrokerFields,
  },
  hirarchy_users_card: {
    description: 'Jerarquía de usuario',
    component: HirarchyUsersCard,
  },
  qr_user_fields: {
    description: 'Datos usuario',
    component: QrHeader,
    layoutContexts: ['marketing', 'captacion'],
  },
  location_tpv_faceapp: {
    description: 'Ubicación TPV faceapp',
    component: TPVLocation,
    layoutContexts: ['captacion'],
  },
  seduvi_dialog: {
    description: 'Dialogo registro SEDUVI',
    component: SeduviDialog,
    layoutContexts: ['captacion'],
  },
  perfil_usuario_dialog: {
    description: 'Dialogo perfil usuario',
    component: PerfilUsuarioDialog,
    layoutContexts: ['usuario'],
  },
  naturgy_info_card: {
    description: 'Tarjeta de solicitud naturgy',
    component: FaceappNaturgyInfoCard,
    layoutContexts: ['captacion'],
  },
  acometida_naturgy_info_card: {
    description: 'Tarjeta de solicitud acometida naturgy',
    component: FaceappAcometidaNaturgyInfoCard,
    layoutContexts: ['captacion'],
  },
  captacion_password_link_card: {
    description: 'Tarjeta con enlace para colocar contraseña',
    component: CaptacionPasswordLinkCard,
    layoutContexts: ['captacion'],
  },
  campania_qr: {
    description: 'Qr de campania options',
    component: CampaniaQr,
    layoutContexts: ['marketing'],
  },
  title_section: {
    description: 'Título de sección',
    component: TitleSection,
  },
  user_invitation_btn: {
    description: 'Botón invitar usuario',
    component: UserInvitationBtn,
  },
  landing_invitation: {
    description: 'Invitación a landing',
    component: LandingInvitation,
  },
  qr_captacion_access: {
    description: 'Qr de acceso por captación',
    component: QrCaptacionesAccess,
  },
  contacts_list: {
    description: 'Lista de contactos',
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
    component: ContactsList,
  },
  contract: {
    description: 'Contrato',
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
    component: Contract,
  },
  proveedor_contact: {
    description: 'Contacto proveedor',
    layoutTypes: ['detalle'],
    layoutContexts: ['proveedor'],
    component: ProveedorContacto,
  },
  imports_list: {
    description: 'Lista de importaciones',
    layoutTypes: ['detalle'],
    layoutContexts: ['proveedor'],
    component: ImportacionesLayouts,
  },
  liquidaciones_cliente_table: {
    description: 'Tabla de liquidaciones',
    layoutTypes: ['detalle'],
    layoutContexts: ['cliente'],
    component: LiquidacionesClienteTable,
  },
  comisiones_cliente_table: {
    description: 'Tabla de comisiones',
    layoutTypes: ['detalle'],
    layoutContexts: ['cliente'],
    component: ComisionesClienteTable,
  },
  situaciones_cliente_table: {
    description: 'Tabla de situaciones de liquidación',
    layoutTypes: ['detalle'],
    layoutContexts: ['cliente'],
    component: SituacionesLiquidacionClienteTable,
  },
  reglas_cliente_table: {
    description: 'Tabla de reglas de liquidación',
    layoutTypes: ['detalle'],
    layoutContexts: ['cliente'],
    component: ReglasLiquidacionClienteTable,
  },
  delegacion_datos_card: {
    description: 'Datos del delegacion',
    component: DelegacionDatosCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['delegacion'],
  },
  tarjeta_descripcion_producto: {
    description: 'Tarjeta con la descripción del producto',
    component: ProductDescriptionCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['producto'],
  },
  tarjeta_estado_producto: {
    description: 'Tarjeta de estado del producto',
    component: ProductStateCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['producto'],
  },
  tarjeta_tipo_inmueble: {
    description: 'Tarjeta de tipo de inmueble',
    component: TipoInmuebleCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['producto'],
  },
  tarjeta_status_inmueble: {
    description: 'Tarjeta de status de inmueble',
    component: StatusInmuebleCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['producto'],
  },
  tarjeta_atributos_inmueble: {
    description: 'Tarjeta de atributos de inmueble',
    component: InmuebleAttributesCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['producto'],
  },
  tarjeta_atributos_contacto: {
    description: 'Tarjeta de atributos de contacto',
    component: InmuebleContactoAttributesCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['producto'],
  },
  images_carousel: {
    description: 'Carousel de imagenes',
    component: ProductCarousel,
    layoutTypes: ['detalle'],
    layoutContexts: ['producto'],
  },
  product_tags: {
    description: 'Tarjeta de tags',
    component: ProductTags,
    layoutTypes: ['detalle'],
    layoutContexts: ['producto'],
  },
  product_name: {
    description: 'Tarjeta de nombre de producto',
    component: ProductNameCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['producto'],
  },
  urban_events_product_resume_card: {
    description: 'Tarjeta de resumen de producto urban events',
    component: UrbanEventsProductResumeCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['producto'],
  },
  urban_events_product_card: {
    description: 'Tarjeta de producto urban events',
    component: UrbanEventsProductCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['producto', 'captacion'],
  },
  urban_events_acsess_scanner: {
    description: 'Scanner de acceso urban events',
    component: UrbanEventsAccessScanner,
    layoutTypes: ['detalle'],
    layoutContexts: ['marketing'],
  },
  product_campanias: {
    description: 'Campañas de producto',
    component: ProductCampanias,
    layoutTypes: ['detalle'],
    layoutContexts: ['producto'],
  },
  user_document_cards: {
    description: 'Tarjetas de documentos',
    component: UserDocumentCards,
    layoutTypes: ['detalle'],
    layoutContexts: ['usuario'],
  },
  perdm_contact_card: {
    description: 'Tarjeta de contacto perdm',
    component: PerdmContactCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['usuario'],
  },
  user_location: {
    description: 'Tarjetas de ubicación',
    component: UsuarioLocationCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['usuario'],
  },
  faceapp_captador_card: {
    description: 'Tarjeta de captador faceapp',
    component: FaceappCaptadorCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  faceapp_contacto_card: {
    description: 'Tarjeta de contacto faceapp',
    component: FaceappContactInfo,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion', 'usuario'],
  },
  faceapp_user_access_control: {
    description: 'Control de acceso usuario faceapp',
    component: FaceappUserAccessControl,
    layoutTypes: ['detalle'],
    layoutContexts: ['usuario'],
  },
  user_state_card: {
    description: 'Estado de usuario',
    component: UserStateCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['usuario'],
  },
  faceapp_user_id_externo_card: {
    description: 'Tarjeta de id externo de usuario faceapp',
    component: FaceappIdExternoCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['usuario'],
  },
  faceapp_user_hirarchy: {
    description: 'Tarjeta de jerarquía de usuario de faceapp',
    component: FaceappHirarchyUserCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['usuario'],
  },
  users_table: {
    description: 'Listado de usuarios comerciales',
    component: UserList,
    layoutTypes: ['detalle'],
    layoutContexts: ['usuario'],
  },
  signable_pdf_document: {
    description: 'Documento firmado generado a partir de un PDF estático',
    component: SignablePdfDocument,
    layoutTypes: ['detalle'],
    layoutContexts: ['usuario', 'captacion'],
    help: `{
      context: Record<string, any>;
      documents: string[];
      validateSignature?: boolean;
      entity: 'captacion' | 'usuario';
    }`,
  },
  dynamic_user_document: {
    description: 'Documento dinámico generado a partir de un Layout (usuario)',
    component: DynamicUserDocument,
    layoutTypes: ['detalle'],
    layoutContexts: ['usuario'],
  },
  dynamic_captacion_user_document: {
    description: 'Documento dinámico generado a partir de un Layout (captación)',
    component: DynamicCaptacionUserDocument,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
  },
  dynamic_document: {
    description: 'Documento dinámico generado a partir de un Layout',
    component: DynamicDocument,
    layoutTypes: ['detalle'],
  },
  propiedad_grid_item: {
    description: 'Documento dinámico generado a partir de un Layout',
    component: PropiedadCardView,
    layoutTypes: ['tabla'],
  },
  product_card_generic: {
    description: 'Tarjeta genérica de producto',
    component: ProductoCardGeneric,
    layoutTypes: ['tabla'],
  },
  users_list: {
    description: 'Listado de usuarios',
    component: UserList,
    layoutTypes: ['detalle'],
    layoutContexts: ['usuario'],
  },
  captaciones_list: {
    description: 'Listado de captaciones del usuario',
    component: UserCaptacionesList,
    layoutTypes: ['detalle'],
    layoutContexts: ['usuario'],
  },
  proveedores_producto: {
    description: 'Listado de proveedores del producto',
    component: ProductoProveedores,
    layoutTypes: ['detalle'],
    layoutContexts: ['producto'],
  },
  proveedor_productos: {
    description: 'Listado de productos del proveedor',
    component: ProveedorProductos,
    layoutTypes: ['detalle'],
    layoutContexts: ['proveedor'],
  },
  solicitud_paquete_mobile_card: {
    description: 'Card de captación de paquete para listado',
    component: SolicitudPaqueteMobileCard,
    layoutTypes: ['tabla'],
  },
  solicitud_suministro_naturgy_card: {
    description: 'Card de captación de solicitud de suministro para listado',
    component: SolicitudNaturgyMobileCard,
    layoutTypes: ['tabla'],
  },
  images_gallery: {
    description: 'Galería de imágenes',
    component: ImagesGallery,
    layoutTypes: ['detalle'],
  },
  llamadas_card: {
    description: 'Card de llamadas',
    component: LLamadasCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
    help: JSON.stringify(LlamadasCardPropsSchema.parse({}), null, 2),
  },
  llamadas_list: {
    description: 'Tabla customizada de llamadas',
    component: LlamadasList,
    layoutTypes: ['detalle'],
    layoutContexts: ['captacion'],
    help: JSON.stringify(LlamadasListPropsSchema.parse({}), null, 2),
  },
  partner_data_card: {
    description: 'Tarjeta de datos del partner',
    component: PartnerDataCard,
    layoutTypes: ['detalle'],
    layoutContexts: ['partner', 'captacion'],
    help: JSON.stringify(PartnerDataCardPropsSchema.parse({}), null, 2),
  },
} as { [key: string]: WidgetOption };

export interface WidgetOption {
  component: Component & { __name: string };
  description: string;
  layoutContexts?: LayoutContext[];
  layoutTypes?: LayoutType[];
  help?: string;
}
