import React, { useState, useCallback, forwardRef, useImperativeHandle } from 'react'
import Taro from '@tarojs/taro'
import { View, Text, Image } from '@tarojs/components'
import images from '@/config/images'
import TextareaTag from '@/components/TextareaTag'
// import CoverImageUpload, { type CoverImage } from '@/components/ImageUpload'
import UploadCover, { type CoverImageValue } from '@/components/UploadCover'
import { useDictionaryActions } from '@/store/dictionaryStore'
import './StadiumDetail.scss'

export interface Stadium {
  id?: string
  name: string
  address?: string
  longitude?: number
  latitude?: number
  istance?: string
  court_type?: string
  court_surface?: string
  description?: string
  description_tag?: string[]
  venue_image_list?: CoverImageValue[]
}

interface StadiumDetailProps {
  stadium: Stadium
}

// 定义暴露给父组件的方法接口
export interface StadiumDetailRef {
  getFormData: () => any
  setFormData: (data: any) => void
}


// 公共的标题组件
const SectionTitle: React.FC<{ title: string,prop: string }> = ({ title, prop }) => {
  if (prop === 'venue_image_list') {
    return (
      <View className='section-title'>
        <Text>{title}</Text>
        <View className='heart-wrapper'>
          <Image src={images.ICON_HEART_CIRCLE} className='heart-icon' />
          <View className='icon-bg'></View>
          <Text className='heart-text'>添加截图，平台会优先推荐</Text>
        </View>
      </View>
    )
  }
  return (
    <Text className='section-title'>{title}</Text>
  )
}

// 公共的容器组件
const SectionContainer: React.FC<{ title: string; children: React.ReactNode, prop: string }> = ({ title, children, prop }) => (
  <View className='venue-type-section'>
    <SectionTitle title={title} prop={prop}/>
    <View className='option-buttons'>
      {children}
    </View>
  </View>
)

const StadiumDetail = forwardRef<StadiumDetailRef, StadiumDetailProps>(({
  stadium,
}, ref) => {
  const { getDictionaryValue } = useDictionaryActions()
  const court_type = getDictionaryValue('court_type') || []
  const court_surface = getDictionaryValue('court_surface') || []
  const supplementary_information = getDictionaryValue('supplementary_information') || []
  const  stadiumInfo = [
    {
      label: '场地类型',
      options: court_type,
      prop: 'court_type',
      type: 'tags'
    },
    {
      label: '地面材质',
      options: court_surface,
      prop: 'court_surface',
      type: 'tags'
    },
    {
      label: '场地信息补充',
      options: supplementary_information,
      prop: 'description',
      type: 'textareaTag'
    },
    {
      label: '场地预定截图',
      options: ['有其他场地信息可备注'],
      prop: 'venue_image_list',
      type: 'image'
    }
  ]
  const [formData, setFormData] = useState({
    name: stadium.name,
    address: stadium.address,
    latitude: stadium.longitude,
    longitude: stadium.latitude,
    istance: stadium.istance,
    court_type: court_type[0] || '',
    court_surface: court_surface[0] || '',
    additionalInfo: '',
    venue_image_list: [] as CoverImageValue[],
    description:{
      description: '',
      description_tag: []
    }
  })

  // 暴露方法给父组件
  useImperativeHandle(ref, () => ({
    getFormData: () => formData,
    setFormData: (data: any) => setFormData(data)
  }), [formData, stadium])



  const handleMapLocation = () => {
    Taro.chooseLocation({
      success: (res) => {
        console.log(res,'resres');
        setFormData({
          ...formData,
          name: res.name,
          address: res.address,
          latitude: res.longitude,
          longitude: res.latitude
        })
      },
      fail: (err) => {
        console.error('选择位置失败:', err)
        Taro.showToast({
          title: '位置选择失败',
          icon: 'error'
        })
      }
    })
  }

  const updateFormData = useCallback((prop: string, value: any) => {
    setFormData(prev => ({ ...prev, [prop]: value }))
  }, [])

  const getSelectedByLabel = useCallback((label: string) => {
    if (label === '场地类型') return formData.court_type
    if (label === '地面材质') return formData.court_surface
    return ''
  }, [formData.court_type, formData.court_surface])


  console.log(stadium,'stadiumstadium');
  return (
    <View className='stadium-detail'>
      {/* 已选球场 */}
      <View
        className={`stadium-item`}
        onClick={() => handleMapLocation()}
      >
        <View className='stadium-item-left'>
          <Image src={images.ICON_STADIUM} className='stadium-icon' />
        </View>
        <View className='stadium-item-right'>
          <View className='stadium-name'>{formData.name}</View>
          <View className='stadium-address'>
            <Text>{formData.istance} · </Text>
            <Text>{formData.address}</Text>
            <Image src={images.ICON_ARRORW_SMALL} className='stadium-map-icon' />
          </View>
        </View>
      </View>

      {stadiumInfo.map((item) => {
        if (item.type === 'tags') {
          const selected = getSelectedByLabel(item.label)
          return (
            <SectionContainer key={item.label} title={item.label} prop={item.prop}>
              {item.options.map((opt) => (
                <View
                  key={opt}
                  className={`option-btn ${selected === opt ? 'selected' : ''}`}
                  onClick={() => updateFormData(item.prop, opt)}
                >
                  <Text className='option-text'>{opt}</Text>
                </View>
              ))}
            </SectionContainer>
          )
        }

        if (item.type === 'textareaTag') {
          return (
            <SectionContainer key={item.label} title={item.label} prop={item.prop}>
              <View className='textarea-tag-container'>
                <TextareaTag
                  value={formData[item.prop]}
                  onChange={(value) => updateFormData(item.prop, value)}
                  placeholder='有其他场地信息可备注'
                  options={(item.options || []).map((o) => ({ label: o, value: o }))}
                />
              </View>
            </SectionContainer>
          )
        }

        if (item.type === 'image') {
          return (
            <SectionContainer key={item.label} title={item.label} prop={item.prop}>
              <UploadCover
                value={formData[item.prop]}
                onChange={(value) => {
                  console.log(value, 'value')
                  if (value instanceof Function) {
                    const newValue = value(formData[item.prop])
                    console.log(newValue, 'newValue')
                    updateFormData(item.prop, newValue)
                  } else {
                    updateFormData(item.prop, value)
                  }
                }}
                maxCount={9}
                source={['album', 'history', 'preset']}
                align='left'
              />
            </SectionContainer>
          )
        }

        return null
      })}
    </View>
  )
})

export default StadiumDetail