import { useMessage } from '@/hooks/useMessage'
import React, { useEffect, useState } from 'react'
import DimensionLineSetting from '@/components/floor-plan/modal/setting01/dimensionLine/DimensionLineSetting'
import { usePopup } from '@/hooks/usePopup'
import { v4 as uuidv4 } from 'uuid'
import FontSetting from '@/components/common/font/FontSetting'
import PlanSizeSetting from '@/components/floor-plan/modal/setting01/planSize/PlanSizeSetting'
import { useCanvasSetting } from '@/hooks/option/useCanvasSetting'
import { useRecoilState, useRecoilValue } from 'recoil'
import { fontSelector, globalFontAtom } from '@/store/fontAtom'
import { useEvent } from '@/hooks/useEvent'
export default function SecondOption(props) {
const { getMessage } = useMessage()
const { addPopup, closePopup } = usePopup()
const [showFontSettingModal, setShowFontSettingModal] = useState(false)
const [showDimensionLineSettingModal, setShowDimensionLineSettingModal] = useState(false)
const [showPlanSizeSettingModal, setShowPlanSizeSettingModal] = useState(false)
const [globalFont, setGlobalFont] = useRecoilState(globalFontAtom)
const commonFont = useRecoilValue(fontSelector('commonText'))
const flowFont = useRecoilValue(fontSelector('flowText'))
const lengthFont = useRecoilValue(fontSelector('lengthText'))
const circuitNumberTextFont = useRecoilValue(fontSelector('circuitNumberText'))
const dimensionLineTextFont = useRecoilValue(fontSelector('dimensionLineText'))
const [dimensionId, setDimensionId] = useState(uuidv4())
const [fontId, setFontId] = useState(uuidv4())
const [planSizeId, setPlanSizeId] = useState(uuidv4())
const { initEvent } = useEvent()
const {
fetchSettings,
planSizeSettingMode,
setPlanSizeSettingMode,
settingModalSecondOptions,
setSettingModalSecondOptions,
adsorptionPointMode,
setAdsorptionPointMode,
setAdsorptionRange,
settingsData,
setSettingsData,
settingsDataSave,
setSettingsDataSave,
} = props
const { option3, option4 } = settingModalSecondOptions
// 데이터를 최초 한 번만 조회
useEffect(() => {
console.log('SecondOption useEffect 실행')
setSettingsDataSave({ ...settingsData })
}, [])
const handlePopup = (type) => {
setShowDimensionLineSettingModal(false)
setShowPlanSizeSettingModal(false)
setShowFontSettingModal(false)
switch (type) {
case 'font1': {
//문자 글꼴변경
setShowFontSettingModal(true)
setShowDimensionLineSettingModal(false)
fontProps.type = 'commonText'
fontProps.font = commonFont
fontProps.id = fontId + 1
addPopup(fontId + 1, 2, , true)
break
}
case 'font2': {
//흐름 방향 글꼴 변경
setShowFontSettingModal(true)
setShowDimensionLineSettingModal(false)
fontProps.type = 'flowText'
fontProps.font = flowFont
fontProps.id = fontId + 2
addPopup(fontId + 2, 2, , true)
break
}
case 'font3': {
//치수 글꼴변경
setShowFontSettingModal(true)
setShowDimensionLineSettingModal(false)
fontProps.type = 'lengthText'
fontProps.font = lengthFont
fontProps.id = fontId + 3
addPopup(fontId + 3, 2, , true)
break
}
case 'font4': {
//회로번호 글꼴변경
setShowFontSettingModal(true)
setShowDimensionLineSettingModal(false)
fontProps.type = 'circuitNumberText'
fontProps.font = circuitNumberTextFont
fontProps.id = fontId
addPopup(fontId, 2, , true)
break
}
case 'dimensionLine': {
//치수선 설정
if (!showDimensionLineSettingModal) {
setShowDimensionLineSettingModal(true)
fontProps.font = dimensionLineTextFont
addPopup(dimensionId, 2, , true)
} else {
setShowDimensionLineSettingModal(false)
closePopup(dimensionId)
}
break
}
case 'planSize': {
//도면크기 설정
if (!showPlanSizeSettingModal) {
fetchSettings() //화면 오픈 시 데이터 조회
setShowPlanSizeSettingModal(true)
addPopup(planSizeId, 2, , true)
} else {
setShowPlanSizeSettingModal(false)
closePopup(planSizeId, true)
}
break
}
}
}
const handleFontSave = (font) => {
setGlobalFont((prev) => {
return {
...prev,
[fontProps.type]: {
fontFamily: font.fontFamily,
fontWeight: font.fontWeight,
fontSize: font.fontSize,
fontColor: font.fontColor,
},
}
})
setSettingsData({
...settingsData,
[fontProps.type]: {
fontFamily: font.fontFamily,
fontWeight: font.fontWeight,
fontSize: font.fontSize,
fontColor: font.fontColor,
},
})
}
const fontProps = {
id: fontId,
pos: { x: 745, y: 180 },
setIsShow: setShowFontSettingModal,
onSave: handleFontSave,
isConfig: true,
}
const dimensionProps = {
id: dimensionId,
isShow: showDimensionLineSettingModal,
setIsShow: setShowDimensionLineSettingModal,
settingsData,
setSettingsData,
settingsDataSave,
setSettingsDataSave,
}
const planSizeProps = {
id: planSizeId,
horizon: planSizeSettingMode.originHorizon,
vertical: planSizeSettingMode.originVertical,
isShow: showPlanSizeSettingModal,
setIsShow: setShowPlanSizeSettingModal,
pos: { x: 1025, y: 180 },
settingsData,
setSettingsData,
settingsDataSave,
setSettingsDataSave,
}
const onClickOption = async (item) => {
let option4Data = settingModalSecondOptions?.option4
let adsorpPointData = adsorptionPointMode.adsorptionPoint
//흡착범위 설정(단 건 선택)
if (
item.column === 'adsorpRangeSmall' ||
item.column === 'adsorpRangeSmallSemi' ||
item.column === 'adsorpRangeMedium' ||
item.column === 'adsorpRangeLarge'
) {
// option4에서 한 개만 선택 가능하도록 처리
//const updatedOption4 = option4.map((option) => (option.id === item.id ? { ...option, selected: true } : { ...option, selected: false }))
option4Data = settingModalSecondOptions?.option4.map((option) => {
option.selected = option.id === item.id
return option
})
//흡착점 범위
setAdsorptionRange(item.range)
setAdsorptionPointMode({ ...adsorptionPointMode, adsorptionPoint: adsorpPointData })
} else if (item === 'adsorpPoint') {
setAdsorptionPointMode({ ...adsorptionPointMode, adsorptionPoint: !adsorpPointData })
adsorpPointData = !adsorpPointData
}
setSettingsData({ ...settingsData, option4: [...option4Data], adsorptionPoint: adsorpPointData })
}
useEffect(() => {
//console.log('🚀 ~ useEffect ~ initEvent:')
initEvent()
}, [adsorptionPointMode])
return (
<>
{getMessage('modal.canvas.setting.font.plan.edit')}
{settingModalSecondOptions &&
settingModalSecondOptions.option3.map((item) => (
))}
{getMessage('modal.canvas.setting.font.plan.absorption')}
{settingModalSecondOptions &&
settingModalSecondOptions.option4.map((item) => (
))}
{/*
>
)
}