import { createElement, lazy } from 'react'

const FilamentProfileInfo = lazy(
  () => import('../../components/Dashboard/Production/FilamentProfiles/FilamentProfileInfo')
)
import FilamentProfileIcon from '../../components/Icons/FilamentProfileIcon'
import InfoCircleIcon from '../../components/Icons/InfoCircleIcon'
import EditIcon from '../../components/Icons/EditIcon'
import CheckIcon from '../../components/Icons/CheckIcon'
import XMarkIcon from '../../components/Icons/XMarkIcon'
import BinIcon from '../../components/Icons/BinIcon'

export const FilamentProfile = {
  name: 'filamentProfile',
  label: 'Filament Profile',
  labelPlural: 'Filament Profiles',
  url: '/dashboard/production/filamentprofiles',
  prefix: 'FPF',
  icon: FilamentProfileIcon,
  actions: [
    {
      name: 'info',
      type: 'page',
      pageName: 'info',
      label: 'Info',
      default: true,
      row: true,
      icon: InfoCircleIcon
    },
    {
      name: 'edit',
      type: 'page',
      pageName: 'info',
      label: 'Edit',
      row: true,
      icon: EditIcon,
      visible: (objectData) => {
        return !(objectData?._isEditing && objectData?._isEditing == true)
      }
    },
    {
      name: 'cancelEdit',
      label: 'Cancel Edits',
      type: 'page',
      pageName: 'info',
      icon: XMarkIcon,
      visible: (objectData) => {
        return objectData?._isEditing && objectData?._isEditing == true
      }
    },
    {
      name: 'finishEdit',
      label: 'Save Edits',
      type: 'page',
      pageName: 'info',
      icon: CheckIcon,
      visible: (objectData) => {
        return objectData?._isEditing && objectData?._isEditing == true
      }
    },
    { type: 'divider' },
    {
      name: 'delete',
      type: 'page',
      pageName: 'info',
      label: 'Delete',
      row: true,
      icon: BinIcon,
      danger: true
    }
  ],
  pages: [
    {
      name: 'info',
      content: () => createElement(FilamentProfileInfo)
    }
  ],
  columns: ['_reference', 'name', 'filamentType', 'filament', 'createdAt', 'updatedAt'],
  filters: ['_id','name','createdAt','updatedAt','_reference'],
  sorters: ['name', 'createdAt', 'updatedAt'],
  properties: [
    {
      name: '_id',
      label: 'ID',
      type: 'id',
      objectType: 'filamentProfile',
      showCopy: true,
      readOnly: true,
      columnWidth: 140
    },
    {
      name: 'createdAt',
      label: 'Created At',
      type: 'dateTime',
      readOnly: true,
      columnWidth: 175
    },
    {
      name: '_reference',
      label: 'Reference',
      type: 'reference',
      objectType: 'filamentProfile',
      showCopy: true,
      readOnly: true,
      columnFixed: 'left',
      columnWidth: 180
    },
    {
      name: 'updatedAt',
      label: 'Updated At',
      type: 'dateTime',
      readOnly: true,
      columnWidth: 175
    },
    {
      name: 'name',
      label: 'Name',
      type: 'text',
      required: true,
      columnFixed: 'left',
      columnWidth: 220,
      value: (objectData) => {
        if (
          objectData?.name == undefined &&
          objectData?.filamentType == 'filament' &&
          objectData?.filament != undefined
        ) {
          return objectData?.filament?.name
        }
        if (
          objectData?.name == undefined &&
          objectData?.filamentType == 'filamentSku' &&
          objectData?.filament?.filament != undefined
        ) {
          return (
            objectData?.filament?.filament?.name +
            ' - ' +
            objectData?.filament?.name
          )
        }
        return objectData?.name
      }
    },
    {
      name: 'filamentType',
      label: 'Filament Type',
      type: 'objectType',
      masterFilter: ['filament', 'filamentSku'],
      required: true,
      columnWidth: 150
    },
    {
      name: 'filament',
      label: 'Filament',
      type: 'object',
      objectType: (objectData) => objectData?.filamentType,
      required: true,
      showHyperlink: true,
      columnWidth: 220
    },
    {
      name: 'filamentIsSupport',
      label: 'Is Support Material',
      type: 'bool',
      columnWidth: 170
    },
    {
      name: 'filamentSoluble',
      label: 'Soluble',
      type: 'bool',
      columnWidth: 110
    },
    {
      name: 'filamentPrintable',
      label: 'Printable',
      type: 'number',
      min: 0,
      step: 1,
      columnWidth: 120
    },
    {
      name: 'filamentAdhesivenessCategory',
      label: 'Adhesiveness Category',
      type: 'number',
      min: 0,
      step: 1,
      columnWidth: 190
    },
    {
      name: 'temperatureVitrification',
      label: 'Temperature Vitrification',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 200
    },
    {
      name: 'idleTemperature',
      label: 'Idle Temperature',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 160
    },
    {
      name: 'pelletFlowCoefficient',
      label: 'Pellet Flow Coefficient',
      type: 'number',
      min: 0,
      step: 0.0001,
      columnWidth: 190
    },
    {
      name: 'requiredNozzleHrc',
      label: 'Required Nozzle HRC',
      type: 'number',
      min: 0,
      step: 1,
      columnWidth: 180
    },
    {
      name: 'filamentFlowRatio',
      label: 'Flow Ratio',
      type: 'number',
      min: 0,
      step: 0.01,
      columnWidth: 130
    },
    {
      name: 'enablePressureAdvance',
      label: 'Enable Pressure Advance',
      type: 'bool',
      columnWidth: 200
    },
    {
      name: 'pressureAdvance',
      label: 'Pressure Advance',
      type: 'number',
      min: 0,
      step: 0.001,
      columnWidth: 160,
      visible: (objectData) => objectData?.enablePressureAdvance
    },
    {
      name: 'adaptivePressureAdvance',
      label: 'Enable Adaptive Pressure Advance (beta)',
      type: 'bool',
      columnWidth: 290,
      visible: (objectData) => objectData?.enablePressureAdvance
    },
    {
      name: 'adaptivePressureAdvanceBridges',
      label: 'Adaptive Pressure Advance Bridges',
      type: 'bool',
      columnWidth: 260,
      visible: (objectData) => objectData?.adaptivePressureAdvance
    },
    {
      name: 'adaptivePressureAdvanceOverhangs',
      label: 'Adaptive Pressure Advance Overhangs',
      type: 'bool',
      columnWidth: 280,
      visible: (objectData) => objectData?.adaptivePressureAdvance
    },
    {
      name: 'adaptivePressureAdvanceModel',
      label: 'Adaptive Pressure Advance Model',
      type: 'text',
      span: 2,
      columnWidth: 260,
      visible: (objectData) => objectData?.adaptivePressureAdvance
    },
    {
      name: 'activateChamberTempControl',
      label: 'Activate Temperature Control',
      type: 'bool',
      columnWidth: 220
    },
    {
      name: 'chamberTemperature',
      label: 'Chamber Temperature Target',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 220,
      visible: (objectData) => objectData?.activateChamberTempControl
    },
    {
      name: 'chamberMinimalTemperature',
      label: 'Chamber Temperature Minimal',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 230,
      visible: (objectData) => objectData?.activateChamberTempControl
    },
    {
      name: 'nozzleTemperatureInitialLayer',
      label: 'Nozzle Temperature First Layer',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 240,
      visible: (objectData) => objectData?.activateChamberTempControl
    },
    {
      name: 'nozzleTemperature',
      label: 'Nozzle Temperature Other Layers',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 250
    },
    {
      name: 'nozzleTemperatureRangeLow',
      label: 'Nozzle Temperature Range Low',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 240
    },
    {
      name: 'nozzleTemperatureRangeHigh',
      label: 'Nozzle Temperature Range High',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 250
    },
    {
      name: 'hotPlateTempInitialLayer',
      label: 'Hot Plate First Layer',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 180
    },
    {
      name: 'hotPlateTemp',
      label: 'Hot Plate Other Layers',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 190
    },
    {
      name: 'coolPlateTempInitialLayer',
      label: 'Cool Plate First Layer',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 180
    },
    {
      name: 'coolPlateTemp',
      label: 'Cool Plate Other Layers',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 190
    },
    {
      name: 'engPlateTempInitialLayer',
      label: 'Engineering Plate First Layer',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 220
    },
    {
      name: 'engPlateTemp',
      label: 'Engineering Plate Other Layers',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 230
    },
    {
      name: 'texturedPlateTempInitialLayer',
      label: 'Textured Plate First Layer',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 200
    },
    {
      name: 'texturedPlateTemp',
      label: 'Textured Plate Other Layers',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 210
    },
    {
      name: 'texturedCoolPlateTempInitialLayer',
      label: 'Textured Cool Plate First Layer',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 240
    },
    {
      name: 'texturedCoolPlateTemp',
      label: 'Textured Cool Plate Other Layers',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 250
    },
    {
      name: 'supertackPlateTempInitialLayer',
      label: 'Supertack Plate First Layer',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 210
    },
    {
      name: 'supertackPlateTemp',
      label: 'Supertack Plate Other Layers',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 220
    },
    {
      name: 'filamentAdaptiveVolumetricSpeed',
      label: 'Adaptive Volumetric Speed',
      type: 'bool',
      columnWidth: 220
    },
    {
      name: 'filamentMaxVolumetricSpeed',
      label: 'Max Volumetric Speed',
      type: 'number',
      suffix: ' mm³/s',
      min: 0,
      step: 0.1,
      columnWidth: 200
    },
    {
      name: 'volumetricSpeedCoefficients',
      label: 'Volumetric Speed Coefficients',
      type: 'text',
      span: 2,
      columnWidth: 240,
      visible: (objectData) => objectData?.filamentAdaptiveVolumetricSpeed
    },
    {
      name: 'closeFanTheFirstXLayers',
      label: 'No Cooling for the First Layers',
      type: 'number',
      min: 0,
      step: 1,
      columnWidth: 250
    },
    {
      name: 'fullFanSpeedLayer',
      label: 'Full Fan Speed at Layer',
      type: 'number',
      min: 0,
      step: 1,
      columnWidth: 200
    },
    {
      name: 'fanMinSpeed',
      label: 'Min Fan Speed Threshold',
      type: 'number',
      suffix: ' %',
      min: 0,
      max: 100,
      step: 1,
      columnWidth: 200
    },
    {
      name: 'fanMaxSpeed',
      label: 'Max Fan Speed Threshold',
      type: 'number',
      suffix: ' %',
      min: 0,
      max: 100,
      step: 1,
      columnWidth: 200
    },
    {
      name: 'reduceFanStopStartFreq',
      label: 'Keep Fan Always On',
      type: 'bool',
      columnWidth: 180
    },
    {
      name: 'slowDownForLayerCooling',
      label: 'Slow Printing Down for Better Layer Cooling',
      type: 'bool',
      columnWidth: 320
    },
    {
      name: 'dontSlowDownOuterWall',
      label: "Don't Slow Down Outer Walls",
      type: 'bool',
      columnWidth: 220,
      visible: (objectData) => objectData?.slowDownForLayerCooling
    },
    {
      name: 'slowDownMinSpeed',
      label: 'Min Print Speed',
      type: 'number',
      suffix: ' mm/s',
      min: 0,
      step: 1,
      columnWidth: 150,
      visible: (objectData) => objectData?.slowDownForLayerCooling
    },
    {
      name: 'slowDownLayerTime',
      label: 'Slow Down Layer Time',
      type: 'number',
      suffix: ' s',
      min: 0,
      step: 0.1,
      columnWidth: 190,
      visible: (objectData) => objectData?.slowDownForLayerCooling
    },
    {
      name: 'fanCoolingLayerTime',
      label: 'Fan Cooling Layer Time',
      type: 'number',
      suffix: ' s',
      min: 0,
      step: 0.1,
      columnWidth: 200,
      visible: (objectData) => objectData?.slowDownForLayerCooling
    },
    {
      name: 'enableOverhangBridgeFan',
      label: 'Force Cooling for Overhangs and Bridges',
      type: 'bool',
      columnWidth: 300
    },
    {
      name: 'overhangFanThreshold',
      label: 'Overhang Cooling Activation Threshold',
      type: 'text',
      columnWidth: 280,
      visible: (objectData) => objectData?.enableOverhangBridgeFan
    },
    {
      name: 'overhangFanSpeed',
      label: 'Overhangs and External Bridges Fan Speed',
      type: 'number',
      suffix: ' %',
      min: 0,
      max: 100,
      step: 1,
      columnWidth: 310,
      visible: (objectData) => objectData?.enableOverhangBridgeFan
    },
    {
      name: 'internalBridgeFanSpeed',
      label: 'Internal Bridges Fan Speed',
      type: 'number',
      suffix: ' %',
      min: -1,
      max: 100,
      step: 1,
      columnWidth: 220,
      visible: (objectData) => objectData?.enableOverhangBridgeFan
    },
    {
      name: 'supportMaterialInterfaceFanSpeed',
      label: 'Support Interface Fan Speed',
      type: 'number',
      suffix: ' %',
      min: -1,
      max: 100,
      step: 1,
      columnWidth: 230
    },
    {
      name: 'ironingFanSpeed',
      label: 'Ironing Fan Speed',
      type: 'number',
      suffix: ' %',
      min: -1,
      max: 100,
      step: 1,
      columnWidth: 180
    },
    {
      name: 'initialLayerFanSpeed',
      label: 'Initial Layer Fan Speed',
      type: 'number',
      suffix: ' %',
      min: -1,
      max: 100,
      step: 1,
      columnWidth: 200
    },
    {
      name: 'firstXLayerFanSpeed',
      label: 'First X Layer Fan Speed',
      type: 'number',
      suffix: ' %',
      min: 0,
      max: 100,
      step: 1,
      columnWidth: 200
    },
    {
      name: 'additionalCoolingFanSpeed',
      label: 'Additional Cooling Fan Speed',
      type: 'number',
      suffix: ' %',
      min: 0,
      max: 100,
      step: 1,
      columnWidth: 230
    },
    {
      name: 'additionalFanFullSpeedLayer',
      label: 'Additional Fan Full Speed Layer',
      type: 'number',
      min: 0,
      step: 1,
      columnWidth: 250,
      visible: (objectData) => objectData?.additionalCoolingFanSpeed > 0
    },
    {
      name: 'closeAdditionalFanFirstXLayers',
      label: 'Close Additional Fan First X Layers',
      type: 'bool',
      columnWidth: 280,
      visible: (objectData) => objectData?.additionalCoolingFanSpeed > 0
    },
    {
      name: 'activateAirFiltration',
      label: 'Activate Air Filtration',
      type: 'bool',
      columnWidth: 200
    },
    {
      name: 'activateAirFiltrationDuringPrint',
      label: 'During Print',
      type: 'bool',
      columnWidth: 140,
      visible: (objectData) => objectData?.activateAirFiltration
    },
    {
      name: 'activateAirFiltrationOnCompletion',
      label: 'Complete Print',
      type: 'bool',
      columnWidth: 150,
      visible: (objectData) => objectData?.activateAirFiltration
    },
    {
      name: 'duringPrintExhaustFanSpeed',
      label: 'During Print Exhaust Fan Speed',
      type: 'number',
      suffix: ' %',
      min: 0,
      max: 100,
      step: 1,
      columnWidth: 260,
      visible: (objectData) => objectData?.activateAirFiltration
    },
    {
      name: 'completePrintExhaustFanSpeed',
      label: 'Complete Print Exhaust Fan Speed',
      type: 'number',
      suffix: ' %',
      min: 0,
      max: 100,
      step: 1,
      columnWidth: 270,
      visible: (objectData) => objectData?.activateAirFiltration
    },
    {
      name: 'filamentRetractionLength',
      label: 'Retraction Length',
      type: 'number',
      suffix: ' mm',
      min: 0,
      step: 0.1,
      columnWidth: 170
    },
    {
      name: 'filamentRetractionSpeed',
      label: 'Retraction Speed',
      type: 'number',
      suffix: ' mm/s',
      min: 0,
      step: 1,
      columnWidth: 170
    },
    {
      name: 'filamentDeretractionSpeed',
      label: 'Deretraction Speed',
      type: 'number',
      suffix: ' mm/s',
      min: 0,
      step: 1,
      columnWidth: 180
    },
    {
      name: 'filamentRetractionMinimumTravel',
      label: 'Minimum Travel',
      type: 'number',
      suffix: ' mm',
      min: 0,
      step: 0.1,
      columnWidth: 160
    },
    {
      name: 'filamentRetractWhenChangingLayer',
      label: 'Retract When Changing Layer',
      type: 'bool',
      columnWidth: 220
    },
    {
      name: 'filamentRetractBeforeWipe',
      label: 'Retract Before Wipe',
      type: 'number',
      suffix: ' %',
      min: 0,
      step: 1,
      columnWidth: 180
    },
    {
      name: 'filamentRetractAfterWipe',
      label: 'Retract After Wipe',
      type: 'number',
      suffix: ' mm',
      min: 0,
      step: 0.1,
      columnWidth: 170
    },
    {
      name: 'filamentRetractRestartExtra',
      label: 'Restart Extra Length',
      type: 'number',
      suffix: ' mm',
      min: 0,
      step: 0.1,
      columnWidth: 190
    },
    {
      name: 'filamentRetractLiftAbove',
      label: 'Lift Above',
      type: 'number',
      suffix: ' mm',
      min: 0,
      step: 0.01,
      columnWidth: 130
    },
    {
      name: 'filamentRetractLiftBelow',
      label: 'Lift Below',
      type: 'number',
      suffix: ' mm',
      min: 0,
      step: 0.01,
      columnWidth: 130
    },
    {
      name: 'filamentRetractLiftEnforce',
      label: 'Lift Enforce',
      type: 'text',
      columnWidth: 140
    },
    {
      name: 'filamentWipe',
      label: 'Wipe',
      type: 'bool',
      columnWidth: 90
    },
    {
      name: 'filamentWipeDistance',
      label: 'Wipe Distance',
      type: 'number',
      suffix: ' mm',
      min: 0,
      step: 0.1,
      columnWidth: 150,
      visible: (objectData) => objectData?.filamentWipe
    },
    {
      name: 'filamentZHop',
      label: 'Z Hop',
      type: 'number',
      suffix: ' mm',
      min: 0,
      step: 0.01,
      columnWidth: 110
    },
    {
      name: 'filamentZHopTypes',
      label: 'Z Hop Types',
      type: 'text',
      columnWidth: 130
    },
    {
      name: 'filamentLongRetractionsWhenCut',
      label: 'Long Retractions When Cut',
      type: 'bool',
      columnWidth: 220
    },
    {
      name: 'filamentRetractionDistancesWhenCut',
      label: 'Retraction Distances When Cut',
      type: 'number',
      suffix: ' mm',
      min: 0,
      step: 0.1,
      columnWidth: 250,
      visible: (objectData) => objectData?.filamentLongRetractionsWhenCut
    },
    {
      name: 'longRetractionsWhenEc',
      label: 'Long Retractions When EC',
      type: 'bool',
      columnWidth: 220
    },
    {
      name: 'retractionDistancesWhenEc',
      label: 'Retraction Distances When EC',
      type: 'number',
      suffix: ' mm',
      min: 0,
      step: 0.1,
      columnWidth: 240,
      visible: (objectData) => objectData?.longRetractionsWhenEc
    },
    {
      name: 'filamentLoadingSpeed',
      label: 'Loading Speed',
      type: 'number',
      suffix: ' mm/s',
      min: 0,
      step: 1,
      columnWidth: 150
    },
    {
      name: 'filamentLoadingSpeedStart',
      label: 'Loading Speed Start',
      type: 'number',
      suffix: ' mm/s',
      min: 0,
      step: 1,
      columnWidth: 170
    },
    {
      name: 'filamentUnloadingSpeed',
      label: 'Unloading Speed',
      type: 'number',
      suffix: ' mm/s',
      min: 0,
      step: 1,
      columnWidth: 160
    },
    {
      name: 'filamentUnloadingSpeedStart',
      label: 'Unloading Speed Start',
      type: 'number',
      suffix: ' mm/s',
      min: 0,
      step: 1,
      columnWidth: 180
    },
    {
      name: 'filamentChangeLength',
      label: 'Change Length',
      type: 'number',
      suffix: ' mm',
      min: 0,
      step: 0.1,
      columnWidth: 150
    },
    {
      name: 'filamentChangeLengthNc',
      label: 'Change Length NC',
      type: 'number',
      suffix: ' mm',
      min: 0,
      step: 0.1,
      columnWidth: 170
    },
    {
      name: 'filamentToolchangeDelay',
      label: 'Toolchange Delay',
      type: 'number',
      suffix: ' s',
      min: 0,
      step: 0.1,
      columnWidth: 170
    },
    {
      name: 'filamentExtruderCompatibility',
      label: 'Extruder Compatibility',
      type: 'number',
      min: 0,
      step: 1,
      columnWidth: 190
    },
    {
      name: 'filamentExtruderVariant',
      label: 'Extruder Variant',
      type: 'text',
      columnWidth: 170
    },
    {
      name: 'filamentMultitoolRamming',
      label: 'Multitool Ramming',
      type: 'bool',
      columnWidth: 170
    },
    {
      name: 'filamentMultitoolRammingFlow',
      label: 'Multitool Ramming Flow',
      type: 'number',
      min: 0,
      step: 0.1,
      columnWidth: 200,
      visible: (objectData) => objectData?.filamentMultitoolRamming
    },
    {
      name: 'filamentMultitoolRammingVolume',
      label: 'Multitool Ramming Volume',
      type: 'number',
      min: 0,
      step: 0.1,
      columnWidth: 220,
      visible: (objectData) => objectData?.filamentMultitoolRamming
    },
    {
      name: 'filamentRammingParameters',
      label: 'Ramming Parameters',
      type: 'text',
      span: 2,
      columnWidth: 200,
      visible: (objectData) => objectData?.filamentMultitoolRamming
    },
    {
      name: 'filamentRammingTravelTime',
      label: 'Ramming Travel Time',
      type: 'number',
      suffix: ' s',
      min: 0,
      step: 0.1,
      columnWidth: 190,
      visible: (objectData) => objectData?.filamentMultitoolRamming
    },
    {
      name: 'filamentRammingTravelTimeNc',
      label: 'Ramming Travel Time NC',
      type: 'number',
      suffix: ' s',
      min: 0,
      step: 0.1,
      columnWidth: 210,
      visible: (objectData) => objectData?.filamentMultitoolRamming
    },
    {
      name: 'filamentRammingVolumetricSpeed',
      label: 'Ramming Volumetric Speed',
      type: 'number',
      suffix: ' mm³/s',
      step: 0.1,
      columnWidth: 220,
      visible: (objectData) => objectData?.filamentMultitoolRamming
    },
    {
      name: 'filamentRammingVolumetricSpeedNc',
      label: 'Ramming Volumetric Speed NC',
      type: 'number',
      suffix: ' mm³/s',
      step: 0.1,
      columnWidth: 250,
      visible: (objectData) => objectData?.filamentMultitoolRamming
    },
    {
      name: 'filamentMinimalPurgeOnWipeTower',
      label: 'Minimal Purge on Wipe Tower',
      type: 'number',
      suffix: ' mm³',
      min: 0,
      step: 0.1,
      columnWidth: 230
    },
    {
      name: 'filamentTowerInterfacePreExtrusionDist',
      label: 'Tower Interface Pre-Extrusion Distance',
      type: 'number',
      suffix: ' mm',
      min: 0,
      step: 0.1,
      columnWidth: 290
    },
    {
      name: 'filamentTowerInterfacePreExtrusionLength',
      label: 'Tower Interface Pre-Extrusion Length',
      type: 'number',
      suffix: ' mm',
      min: 0,
      step: 0.1,
      columnWidth: 280
    },
    {
      name: 'filamentTowerInterfacePrintTemp',
      label: 'Tower Interface Print Temperature',
      type: 'number',
      suffix: ' °C',
      step: 1,
      columnWidth: 270
    },
    {
      name: 'filamentTowerInterfacePurgeVolume',
      label: 'Tower Interface Purge Volume',
      type: 'number',
      suffix: ' mm³',
      min: 0,
      step: 0.1,
      columnWidth: 250
    },
    {
      name: 'filamentTowerIroningArea',
      label: 'Tower Ironing Area',
      type: 'number',
      min: 0,
      step: 0.1,
      columnWidth: 180
    },
    {
      name: 'filamentCoolingBeforeTower',
      label: 'Cooling Before Tower',
      type: 'number',
      suffix: ' s',
      min: 0,
      step: 0.1,
      columnWidth: 200
    },
    {
      name: 'filamentCoolingInitialSpeed',
      label: 'Cooling Initial Speed',
      type: 'number',
      suffix: ' mm/s',
      min: 0,
      step: 0.1,
      columnWidth: 200
    },
    {
      name: 'filamentCoolingFinalSpeed',
      label: 'Cooling Final Speed',
      type: 'number',
      suffix: ' mm/s',
      min: 0,
      step: 0.1,
      columnWidth: 190
    },
    {
      name: 'filamentCoolingMoves',
      label: 'Cooling Moves',
      type: 'number',
      min: 0,
      step: 1,
      columnWidth: 150
    },
    {
      name: 'filamentFlushTemp',
      label: 'Flush Temperature',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 170
    },
    {
      name: 'filamentFlushTempFast',
      label: 'Flush Temperature Fast',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 190
    },
    {
      name: 'filamentFlushVolumetricSpeed',
      label: 'Flush Volumetric Speed',
      type: 'number',
      suffix: ' mm³/s',
      min: 0,
      step: 0.1,
      columnWidth: 210
    },
    {
      name: 'filamentPreCoolingTemperature',
      label: 'Pre-Cooling Temperature',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 200
    },
    {
      name: 'filamentPreCoolingTemperatureNc',
      label: 'Pre-Cooling Temperature NC',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 220
    },
    {
      name: 'filamentPreheatTemperatureDelta',
      label: 'Preheat Temperature Delta',
      type: 'number',
      suffix: ' °C',
      step: 1,
      columnWidth: 220
    },
    {
      name: 'filamentPrimeVolumeNc',
      label: 'Prime Volume NC',
      type: 'number',
      suffix: ' mm³',
      min: 0,
      step: 0.1,
      columnWidth: 160
    },
    {
      name: 'filamentRetractLengthNc',
      label: 'Retract Length NC',
      type: 'number',
      suffix: ' mm',
      min: 0,
      step: 0.1,
      columnWidth: 170
    },
    {
      name: 'filamentStampingDistance',
      label: 'Stamping Distance',
      type: 'number',
      suffix: ' mm',
      min: 0,
      step: 0.1,
      columnWidth: 170
    },
    {
      name: 'filamentStampingLoadingSpeed',
      label: 'Stamping Loading Speed',
      type: 'number',
      suffix: ' mm/s',
      min: 0,
      step: 1,
      columnWidth: 210
    },
    {
      name: 'filamentStartGcode',
      label: 'Start G-code',
      type: 'codeBlock',
      language: 'gcode',
      height: '200px',
      span: 2
    },
    {
      name: 'filamentEndGcode',
      label: 'End G-code',
      type: 'codeBlock',
      language: 'gcode',
      height: '160px',
      span: 2
    },
    {
      name: 'filamentChangeExtrusionRoleGcode',
      label: 'Change Extrusion Role G-code',
      type: 'codeBlock',
      language: 'gcode',
      height: '160px',
      span: 2
    },
    {
      name: 'compatiblePrinters',
      label: 'Compatible Printer Profiles',
      type: 'objectList',
      objectType: 'printerProfile',
      span: 2,
      columnWidth: 220
    },
    {
      name: 'compatiblePrintersCondition',
      label: 'Compatible Printers Condition',
      type: 'text',
      span: 2,
      columnWidth: 240
    },
    {
      name: 'compatiblePrints',
      label: 'Compatible Prints',
      type: 'stringList',
      span: 2,
      columnWidth: 200
    },
    {
      name: 'compatiblePrintsCondition',
      label: 'Compatible Prints Condition',
      type: 'text',
      span: 2,
      columnWidth: 230
    },
    {
      name: 'filamentShrink',
      label: 'Shrinkage XY',
      type: 'text',
      columnWidth: 140
    },
    {
      name: 'filamentShrinkageCompensationZ',
      label: 'Shrinkage Compensation Z',
      type: 'text',
      columnWidth: 220
    },
    {
      name: 'filamentDevAmsDryingTemperature',
      label: 'AMS Drying Temperature',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 210
    },
    {
      name: 'filamentDevAmsDryingTime',
      label: 'AMS Drying Time',
      type: 'number',
      suffix: ' h',
      min: 0,
      step: 0.1,
      columnWidth: 170
    },
    {
      name: 'filamentDevAmsDryingHeatDistortionTemperature',
      label: 'AMS Drying Heat Distortion Temperature',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 310
    },
    {
      name: 'filamentDevAmsDryingAmsLimitations',
      label: 'AMS Drying Limitations',
      type: 'text',
      span: 2,
      columnWidth: 210
    },
    {
      name: 'filamentDevChamberDryingBedTemperature',
      label: 'Chamber Drying Bed Temperature',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 260
    },
    {
      name: 'filamentDevChamberDryingTime',
      label: 'Chamber Drying Time',
      type: 'number',
      suffix: ' h',
      min: 0,
      step: 0.1,
      columnWidth: 200
    },
    {
      name: 'filamentDevDryingCoolingTemperature',
      label: 'Drying Cooling Temperature',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 240
    },
    {
      name: 'filamentDevDryingSofteningTemperature',
      label: 'Drying Softening Temperature',
      type: 'number',
      suffix: ' °C',
      min: 0,
      step: 1,
      columnWidth: 260
    },
    {
      name: 'filamentNotes',
      label: 'Filament Notes',
      type: 'markdown',
      span: 2
    }
  ]
}

export const FILAMENT_PROFILE_MATERIAL_PROPERTIES = [
  'filamentIsSupport',
  'filamentSoluble',
  'filamentPrintable',
  'filamentAdhesivenessCategory',
  'temperatureVitrification',
  'idleTemperature',
  'pelletFlowCoefficient',
  'requiredNozzleHrc'
]
export const FILAMENT_PROFILE_FLOW_PRESSURE_PROPERTIES = [
  'filamentFlowRatio',
  'enablePressureAdvance',
  'pressureAdvance',
  'adaptivePressureAdvance',
  'adaptivePressureAdvanceBridges',
  'adaptivePressureAdvanceOverhangs',
  'adaptivePressureAdvanceModel'
]
export const FILAMENT_PROFILE_TEMPERATURE_PROPERTIES = [
  'activateChamberTempControl',
  'chamberTemperature',
  'chamberMinimalTemperature',
  'nozzleTemperatureInitialLayer',
  'nozzleTemperature',
  'nozzleTemperatureRangeLow',
  'nozzleTemperatureRangeHigh'
]
export const FILAMENT_PROFILE_BED_TEMPERATURE_PROPERTIES = [
  'hotPlateTempInitialLayer',
  'hotPlateTemp',
  'coolPlateTempInitialLayer',
  'coolPlateTemp',
  'engPlateTempInitialLayer',
  'engPlateTemp',
  'texturedPlateTempInitialLayer',
  'texturedPlateTemp',
  'texturedCoolPlateTempInitialLayer',
  'texturedCoolPlateTemp',
  'supertackPlateTempInitialLayer',
  'supertackPlateTemp'
]
export const FILAMENT_PROFILE_SPEED_PROPERTIES = [
  'filamentAdaptiveVolumetricSpeed',
  'filamentMaxVolumetricSpeed',
  'volumetricSpeedCoefficients'
]
export const FILAMENT_PROFILE_COOLING_PROPERTIES = [
  'closeFanTheFirstXLayers',
  'fullFanSpeedLayer',
  'fanMinSpeed',
  'fanMaxSpeed',
  'reduceFanStopStartFreq',
  'slowDownForLayerCooling',
  'dontSlowDownOuterWall',
  'slowDownMinSpeed',
  'slowDownLayerTime',
  'fanCoolingLayerTime',
  'enableOverhangBridgeFan',
  'overhangFanThreshold',
  'overhangFanSpeed',
  'internalBridgeFanSpeed',
  'supportMaterialInterfaceFanSpeed',
  'ironingFanSpeed',
  'initialLayerFanSpeed',
  'firstXLayerFanSpeed',
  'additionalCoolingFanSpeed',
  'additionalFanFullSpeedLayer',
  'closeAdditionalFanFirstXLayers'
]
export const FILAMENT_PROFILE_EXHAUST_FAN_PROPERTIES = [
  'activateAirFiltration',
  'activateAirFiltrationDuringPrint',
  'activateAirFiltrationOnCompletion',
  'duringPrintExhaustFanSpeed',
  'completePrintExhaustFanSpeed'
]
export const FILAMENT_PROFILE_RETRACTION_PROPERTIES = [
  'filamentRetractionLength',
  'filamentRetractionSpeed',
  'filamentDeretractionSpeed',
  'filamentRetractionMinimumTravel',
  'filamentRetractWhenChangingLayer',
  'filamentRetractBeforeWipe',
  'filamentRetractAfterWipe',
  'filamentRetractRestartExtra',
  'filamentRetractLiftAbove',
  'filamentRetractLiftBelow',
  'filamentRetractLiftEnforce',
  'filamentWipe',
  'filamentWipeDistance',
  'filamentZHop',
  'filamentZHopTypes',
  'filamentLongRetractionsWhenCut',
  'filamentRetractionDistancesWhenCut',
  'longRetractionsWhenEc',
  'retractionDistancesWhenEc'
]
export const FILAMENT_PROFILE_LOADING_PROPERTIES = [
  'filamentLoadingSpeed',
  'filamentLoadingSpeedStart',
  'filamentUnloadingSpeed',
  'filamentUnloadingSpeedStart',
  'filamentChangeLength',
  'filamentChangeLengthNc',
  'filamentToolchangeDelay',
  'filamentExtruderCompatibility',
  'filamentExtruderVariant',
  'filamentMultitoolRamming',
  'filamentMultitoolRammingFlow',
  'filamentMultitoolRammingVolume',
  'filamentRammingParameters',
  'filamentRammingTravelTime',
  'filamentRammingTravelTimeNc',
  'filamentRammingVolumetricSpeed',
  'filamentRammingVolumetricSpeedNc'
]
export const FILAMENT_PROFILE_WIPE_TOWER_PROPERTIES = [
  'filamentMinimalPurgeOnWipeTower',
  'filamentTowerInterfacePreExtrusionDist',
  'filamentTowerInterfacePreExtrusionLength',
  'filamentTowerInterfacePrintTemp',
  'filamentTowerInterfacePurgeVolume',
  'filamentTowerIroningArea',
  'filamentCoolingBeforeTower',
  'filamentCoolingInitialSpeed',
  'filamentCoolingFinalSpeed',
  'filamentCoolingMoves',
  'filamentFlushTemp',
  'filamentFlushTempFast',
  'filamentFlushVolumetricSpeed',
  'filamentPreCoolingTemperature',
  'filamentPreCoolingTemperatureNc',
  'filamentPreheatTemperatureDelta',
  'filamentPrimeVolumeNc',
  'filamentRetractLengthNc',
  'filamentStampingDistance',
  'filamentStampingLoadingSpeed'
]
export const FILAMENT_PROFILE_GCODE_PROPERTIES = [
  'filamentStartGcode',
  'filamentEndGcode',
  'filamentChangeExtrusionRoleGcode'
]
export const FILAMENT_PROFILE_COMPATIBILITY_PROPERTIES = [
  'compatiblePrinters',
  'compatiblePrintersCondition',
  'compatiblePrints',
  'compatiblePrintsCondition'
]
export const FILAMENT_PROFILE_SHRINKAGE_DRYING_PROPERTIES = [
  'filamentShrink',
  'filamentShrinkageCompensationZ',
  'filamentDevAmsDryingTemperature',
  'filamentDevAmsDryingTime',
  'filamentDevAmsDryingHeatDistortionTemperature',
  'filamentDevAmsDryingAmsLimitations',
  'filamentDevChamberDryingBedTemperature',
  'filamentDevChamberDryingTime',
  'filamentDevDryingCoolingTemperature',
  'filamentDevDryingSofteningTemperature'
]
