package com.cr.pages

import android.content.Context
import android.os.Handler
import android.os.Looper
import android.view.View
import androidx.fragment.app.Fragment
import com.cr.common.CrDialogManager
import com.cr.common.CrKeyManager
import com.cr.cruav.CrApplication
import com.cr.cruav.R
import com.cr.data.CrUtil
import com.cr.dialog.DialogLoadingUtil
import com.cr.dialog.DialogNormal
import com.cr.models.CompletionModel
import com.cr.models.ICompletion

/**
 * 操作系统：MAC系统
 * 创建者：王成
 * 创建日期：2023/4/11 14:12
 * 描述：Fragment 公共基础类
 */
open class CrFragment :Fragment(){
    // define: 2023/3/10 创建主线程Looper
    protected var mainHandler = Handler(Looper.getMainLooper())

    // define: 2023/3/14 挂接的主视图
    protected var mainView: View? = null

    // define: 2023/4/3 定义自身引用
    protected var self: Fragment? = null

    /**
     * 关联控件
     */
    open fun joinControls() {
        // todo: 2023/3/31 初始化控件
        initControls()
    }

    /**
     * 初始化控件
     */
    open fun initControls() {

    }

    /**
     * 初始化页面
     */
    open fun initPage() {

    }

    /**
     * 显示警告消息
     * @param warning String 警告消息
     */
    protected fun showWarning(warning: String) {
       CrDialogManager.getInstance().showWarning(warning)
    }

    /**
     * 显示错误信息
     * @param error String 错误消息
     */
    protected fun showError(error: String) {
        CrDialogManager.getInstance().showError(error)
    }

    /**
     * 确认对话框
     * @param message String 显示的消息内容
     * @param actionButtonContent Array<String> 按钮文字数组 大小必须是2
     * @param callback ICompletion<String> 回调 可以传null
     */
    protected fun showConfirm(message:String,actionButtonContent:Array<String>,callback:ICompletion<String>?){
        if(actionButtonContent.size != 2) return
        CrDialogManager.getInstance().showConfirm(message,actionButtonContent,callback)
    }

    /**
     * 显示提示信息
     * @param information String 提示消息
     */
    protected fun showInformation(information: String) {
        CrDialogManager.getInstance().showInformation(information)
    }

    /**
     * 显示等待框
     * @param message String 消息内容
     */
    protected fun showLoading(message:String){
        mainHandler.post{
            DialogLoadingUtil.show(CrApplication.getContext(),message)
        }
    }

    /**
     * 关闭等待框
     */
    protected fun closeLoading(){
        mainHandler.post {
            DialogLoadingUtil.dismiss()
        }
    }

    /**
     * 更新等待框内容
     * @param message String
     */
    protected fun updateLoading(message:String){
        mainHandler.post {
            DialogLoadingUtil.update(message)
        }
    }

    /**
     * 显示提示消息
     * @param message String
     */
    protected fun showToast(message:String){
        mainHandler.post {
            CrUtil.showToast(message)
        }
    }

    /**
     * 获取上下文
     * @return Context?
     */
    override fun getContext(): Context? {
        return CrApplication.getContext()
    }
}