package com.zj365.health.weight

import android.annotation.SuppressLint
import android.content.Context
import android.view.View
import android.widget.TextView
import androidx.core.content.ContextCompat
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.components.MarkerView
import com.github.mikephil.charting.data.BarEntry
import com.github.mikephil.charting.data.BaseEntry
import com.github.mikephil.charting.data.Entry
import com.github.mikephil.charting.data.LineDataSet
import com.github.mikephil.charting.highlight.Highlight
import com.github.mikephil.charting.utils.MPPointF
import com.xty.base.utils.OrganStatusCalcUtil
import com.zj365.health.R
import java.text.DecimalFormat


/**
 */
@SuppressLint("ViewConstructor")
class SleepCompareMarkView(context: Context?, layoutResource: Int  ) :
    MarkerView(context, layoutResource) {

    var mDeep: TextView
    var mLight: TextView
    var timeView: TextView


    init {
        timeView = findViewById(R.id.time)
        mDeep = findViewById(R.id.tvDeep)
        mLight = findViewById(R.id.tvLight)

    }

    /**
     * 保留小数位
     */
    private fun changeDecimals(str:String, number: Int):String {
        return  String.format("%.${number}f",str.toFloat())
    }

    @SuppressLint("SuspiciousIndentation")
    override fun refreshContent(e: Entry?, highlight: Highlight?) {
//        val barEntry = e as BarEntry
        var datas = e?.data as MutableList<String>

    timeView.text = datas[0]
    visibility  = View.VISIBLE
    mDeep.text = "深睡 "+String.format("%.1f", datas[1].toFloat())+"h  浅睡"+String.format("%.1f", datas[2].toFloat())+"h"
    mLight.text = "深睡 "+String.format("%.1f", datas[3].toFloat() )+"h  浅睡"+String.format("%.1f", datas[4].toFloat())+"h"

        super.refreshContent(e, highlight)
    }

    override fun getOffset(): MPPointF {
        return MPPointF((-(width / 2)).toFloat(), (-height).toFloat()-10f)

    }

    private val STOKE_WIDTH = 5f //这里对于stroke_width的宽度也要做一定偏移


    override fun getOffsetForDrawingAtPoint(posX: Float, posY: Float): MPPointF? {
        val offset = offset
        val chart = chartView
        val width = width.toFloat()
        val height = height.toFloat()
        // posY \posX 指的是markerView左上角点在图表上面的位置
        //处理Y方向
        if (posY <= height) { // 如果点y坐标小于markerView的高度，如果不处理会超出上边界，处理了之后这时候箭头是向上的，我们需要把图标下移一个箭头的大小
            offset.y = 0f
        } else { //否则属于正常情况，因为我们默认是箭头朝下，然后正常偏移就是，需要向上偏移markerView高度和arrow size，再加一个stroke的宽度，因为你需要看到对话框的上面的边框
            offset.y = -height - STOKE_WIDTH // 40 arrow height   5 stroke width
        }
        //处理X方向，分为3种情况，1、在图表左边 2、在图表中间 3、在图表右边（不考虑超出屏幕问题）
        offset.x = 0f
        if (posX > chart.width - width) {//如果超过右边界，则向左偏移markerView的宽度
            offset.x = -width;
        } else {//默认情况，不偏移（因为是点是在左上角）
            offset.x = 0f
            if (posX > width / 2) {//如果大于markerView的一半，说明箭头在中间，所以向右偏移一半宽度
                offset.x = -(width / 2);
            }
        }

        return offset
    }


}