package com.example.kmptpc_compose_sample.demos.foundation

import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.draganddrop.DragAndDropEvent
import androidx.compose.ui.draganddrop.DragAndDropTransferData
import androidx.compose.ui.graphics.kLog

/**
 * 【与 iOS 对齐】创建拖放传输数据
 * 
 * iOS 版本使用 UIDragItem.fromString(item) 创建拖放数据
 * HarmonyOS 版本使用 DragAndDropTransferData(text = item) 创建文本数据
 * 
 * @param item 要传输的文本内容
 * @return DragAndDropTransferData 对象，包含文本数据
 */
@OptIn(ExperimentalComposeUiApi::class)
actual fun createDragAndDropTransferData(item: String): DragAndDropTransferData? {
    kLog.d("DragAndDropDemo.ohos: createDragAndDropTransferData called")
    kLog.d("DragAndDropDemo.ohos: Input item='$item', length=${item.length}")
    
    // 创建包含文本的 DragAndDropTransferData
    // OHOS 平台使用 text 参数传递文本数据
    val transferData = DragAndDropTransferData(text = item)
    
    kLog.d("DragAndDropDemo.ohos: Created DragAndDropTransferData successfully")
    kLog.d("DragAndDropDemo.ohos: TransferData.text='${transferData.text}', length=${transferData.text?.length ?: 0}")
    
    return transferData
}

/**
 * 【与 iOS 对齐】从拖放事件中提取数据
 * 
 * iOS 版本从 event.items 中提取 localObject（NSString）
 * HarmonyOS 版本调用 event.getTextData() 从 Native API 或 JSON 格式中提取文本
 * 
 * @param event 拖放事件对象
 * @return 提取的文本内容，如果提取失败则返回 null
 */
@OptIn(ExperimentalComposeUiApi::class)
actual fun extractItemFromEvent(event: DragAndDropEvent): String? {
    kLog.d("DragAndDropDemo.ohos: extractItemFromEvent called")
    kLog.d("DragAndDropDemo.ohos: Event object=$event")
    
    
    // 尝试获取事件位置信息（用于调试）
    val position = event.getPosition()
    if (position != null) {
        kLog.d("DragAndDropDemo.ohos: Event position: x=${position.x}, y=${position.y}")
    } else {
        kLog.d("DragAndDropDemo.ohos: Event position is null")
    }
    
    // 从 DragAndDropEvent 中提取文本数据
    // getTextData() 会尝试从 Native API 或 JSON 格式中提取文本
    kLog.d("DragAndDropDemo.ohos: Calling event.getTextData()...")
    val text = event.getTextData()
    
    if (text != null) {
        kLog.d("DragAndDropDemo.ohos: Successfully extracted text from event")
        kLog.d("DragAndDropDemo.ohos: Extracted text='$text', length=${text.length}")
    } else {
        // 如果无法提取文本，可能是事件数据格式问题或拖放操作失败
        // 这在开发阶段可以帮助调试
        kLog.d("DragAndDropDemo.ohos: WARNING - Failed to extract text from event")
        kLog.d("DragAndDropDemo.ohos: Possible reasons:")
        kLog.d("DragAndDropDemo.ohos:   1. Event data format issue")
        kLog.d("DragAndDropDemo.ohos:   2. Drag and drop operation failed")
        kLog.d("DragAndDropDemo.ohos:   3. UDMF data extraction failed")
        kLog.d("DragAndDropDemo.ohos:   4. JSON parsing failed")
        kLog.d("DragAndDropDemo.ohos: Failed to extract text from event")
    }
    
    return text
}

