package com.yidianling.tests

import android.annotation.SuppressLint
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ImageView
import android.widget.TextView
import com.alibaba.android.arouter.facade.annotation.Route
import com.ydl.ydl_image.module.GlideApp
import com.ydl.ydl_image.transform.GlideCircleTransform
import com.ydl.ydlcommon.base.BaseActivity
import com.ydl.ydlcommon.router.YdlCommonOut
import com.ydl.ydlcommon.utils.NetworkParamsUtils
import com.ydl.ydlcommon.utils.remind.HttpErrorUtils
import com.ydl.ydlcommon.view.dialog.NormalDialog
import com.yidianling.common.tools.ToastUtil
import com.yidianling.im.api.bean.IMRequestCallback
import com.yidianling.tests.home.param.RecentCmd
import com.yidianling.tests.router.TestsIn
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.tests_activity_select_conversation.*
import java.util.*

/**
 * Created by Wi1ls on 2016/11/10;
 */
@Route(path = "/test/select_conversation")
class SelectConversationActivity : BaseActivity() {
    override fun layoutResId(): Int {
        return R.layout.tests_activity_select_conversation
    }

    override fun initDataAndEvent() {
        url = getIntent().getStringExtra("url")
        head = getIntent().getStringExtra("head")
        title = getIntent().getStringExtra("title")
        share_url = getIntent().getStringExtra("share_url")
        id = getIntent().getIntExtra("id", 0)
        flag = getIntent().getIntExtra("flag", 0)

        init()
    }

//    internal var text_empty: TextView? = null

    internal var url: String? = null
    internal var head: String? = null
    internal var title: String? = null
    internal var share_url: String? = null
    internal var id: Int = 0
    internal var flag: Int = 0

    private var myData: MutableList<RecentExpert> = ArrayList<RecentExpert>()

    internal fun init() {
        getData()
    }

    @SuppressLint("WrongConstant")
    private fun handleData() {
            text_empty.visibility = View.INVISIBLE
            select_lv.visibility = View.VISIBLE
            val conversationAdapter = object : BaseAdapter() {
                override fun getCount(): Int {
                    return myData.size
                }

                override fun getItem(position: Int): Any {
                    return myData[position]
                }

                override fun getItemId(position: Int): Long {
                    return position.toLong()
                }

                override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
                    val view = LayoutInflater.from(mContext).inflate(R.layout.tests_ui_select_conversation_item, null, false)
                    val s = view.findViewById<ImageView>(R.id.sdv_head) as ImageView
                    val n = view.findViewById<TextView>(R.id.name) as TextView
                    GlideApp.with(mContext)
                            .load(myData[position].getHead())
                            .transform(GlideCircleTransform(mContext))
                            .centerCrop()
                            .into(s)
                    n.text = myData[position].name
                    view.setOnClickListener {
                        val builder = NormalDialog.Builder(mContext)
                        builder.setTitle("")
                        builder.setMessage("确定将测试结果发送给:" + myData[position].name + "?")
                        builder.setPositiveButton("确定"
                        ) { dialog, which ->
                            TestsIn.sendTestResultMessage(myData[position].uid, "测试结果", title, head, url, id, share_url,
                                    object : IMRequestCallback<Void> {
                                        override fun onSuccess(t: Void?) {
                                            YdlCommonOut.showToast("发送成功")

                                            finish()
                                        }

                                        override fun onFailed(i: Int) {
                                            YdlCommonOut.showToast("发送失败")
                                            finish()
                                        }

                                        override fun onException(throwable: Throwable?) {
                                            YdlCommonOut.showToast("发送失败")
                                            finish()
                                        }
                                    })
                            dialog.dismiss()
                        }
                        builder.setNegativeButton("取消"
                        ) { dialog, _ -> dialog.dismiss() }
                        builder.create().show()
                    }
                    return view
                }
            }
            select_lv.adapter = conversationAdapter
    }

    private fun getData() {
        val cmd = RecentCmd()
        TestRetrofitApi.getTestRetrofitApi().getRecentExpertList(NetworkParamsUtils.getMaps(cmd))
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnSubscribe({showProgressDialog("")})
                .doAfterTerminate({dismissProgressDialog()})
                .subscribe(
                        {
                            if (it.code == 0) {
                                for (recent in it.data) {
                                    val recentExpert = RecentExpert(""+recent.uid, recent.head, recent.name)
                                    myData.add(recentExpert)
                                }
                                handleData()
                            } else {
                                ToastUtil.toastShort(this@SelectConversationActivity, it.msg)
                            }
                        },{
                            HttpErrorUtils.handleError(mContext,it)
                        })
    }

    companion object {
        val FLAG_SEND_TESTRESULT = 1
    }


}