Newer
Older
MonCalc / app / src / main / kotlin / jackall / moncalc / viewmodel / FruitAnalyzeViewModel.kt
package jackall.moncalc.viewmodel

import android.arch.lifecycle.ViewModel
import android.arch.lifecycle.ViewModelProvider
import android.databinding.BindingAdapter
import android.graphics.Color
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import com.github.mikephil.charting.charts.PieChart
import com.github.mikephil.charting.components.Legend
import com.github.mikephil.charting.data.Entry
import com.github.mikephil.charting.data.PieData
import com.github.mikephil.charting.data.PieEntry
import com.github.mikephil.charting.formatter.IValueFormatter
import com.github.mikephil.charting.utils.ViewPortHandler
import jackall.moncalc.App
import jackall.moncalc.adapter.AnalyzeFruitAdapter
import jackall.moncalc.db.MonstDataRealmHelper
import jackall.moncalc.db.QuestRecordRealmHelper
import jackall.moncalc.model.PieChartModel
import jackall.moncalc.vo.Fruit
import jackall.moncalc.vo.Grade

/**
 * Created by matsumoto_k on 2017/11/04.
 */
class FruitAnalyzeViewModel : LifecycleViewModel() {
    val questRealmHelper = QuestRecordRealmHelper()
    val monstDataRealmHelper = MonstDataRealmHelper()
    var pieData: PieData
    var pieChartModel: PieChartModel
    var items: ArrayList<FruitAnalyzeItemViewModel>

    init {
        val entries = ArrayList<PieEntry>()
        for (fruitId in 0..5) {
            val count = questRealmHelper.countGradeById(fruitId)
            if (count > 0) {
                entries.add(PieEntry(count.toFloat(), monstDataRealmHelper.findNameById(Grade::class.java, fruitId)))
            }
        }
        pieChartModel = PieChartModel(entries.apply { sortByDescending { it.value } }, "")
        this.pieData = pieChartModel.pieData

        val items = ArrayList<FruitAnalyzeItemViewModel>()
        items.add(
                FruitAnalyzeItemViewModel(
                        "総合",
                        questRealmHelper.countGradeById(0).toString(),
                        questRealmHelper.countGradeById(1).toString(),
                        questRealmHelper.countGradeById(2).toString(),
                        questRealmHelper.countGradeById(3).toString(),
                        questRealmHelper.countGradeById(4).toString(),
                        questRealmHelper.countGradeById(5).toString()
                )
        )
//        リストビューに入れる
        monstDataRealmHelper.findAll(Fruit::class.java).forEach {
            if (!questRealmHelper.isDrop(it.id))
                return@forEach
            val item = FruitAnalyzeItemViewModel()
            item.fruitName = monstDataRealmHelper.findNameById(Fruit::class.java, it.id)
            item.grade0 = questRealmHelper.countGrade(it.id, 0).toString()
            item.grade1 = questRealmHelper.countGrade(it.id, 1).toString()
            item.grade2 = questRealmHelper.countGrade(it.id, 2).toString()
            item.grade3 = questRealmHelper.countGrade(it.id, 3).toString()
            item.grade4 = questRealmHelper.countGrade(it.id, 4).toString()
            item.grade5 = questRealmHelper.countGrade(it.id, 5).toString()
            items.add(item)
        }
        this.items = items.apply { sortByDescending { it.count() } }
    }

    object Adapter {
        @JvmStatic
        @BindingAdapter("android:fruitPieChart")
        fun hoge(mChart: PieChart, pieData: PieData) {
            mChart.setEntryLabelColor(Color.BLACK)
            mChart.isDrawHoleEnabled = false
            mChart.legend.verticalAlignment = Legend.LegendVerticalAlignment.TOP
            mChart.legend.horizontalAlignment = Legend.LegendHorizontalAlignment.RIGHT
            mChart.legend.orientation = Legend.LegendOrientation.VERTICAL
            mChart.isRotationEnabled = false
            pieData.setValueFormatter(object : IValueFormatter {
                override fun getFormattedValue(value: Float, entry: Entry?, dataSetIndex: Int, viewPortHandler: ViewPortHandler?): String {
                    return String.format("%.0f", value)
                }
            })
            mChart.description.text = "わくわくの実ドロップ数"
            mChart.data = pieData
        }

        @JvmStatic
        @BindingAdapter("android:setFruitTempleList")
        fun setAnalyzeFruitList(view: RecyclerView, items: ArrayList<FruitAnalyzeItemViewModel>) {
            view.layoutManager = LinearLayoutManager(App.instance)
            view.adapter = AnalyzeFruitAdapter(App.instance, items)
        }
    }

    class Factory() : ViewModelProvider.NewInstanceFactory() {
        override fun <T : ViewModel?> create(modelClass: Class<T>): T {
            return FruitAnalyzeViewModel() as T
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        questRealmHelper.close()
        monstDataRealmHelper.close()
    }
}