package com.lemonhc.mplus.mcare_plus.activity.lockScreen

import android.app.Activity
import android.content.Context
import android.content.Context.MODE_PRIVATE
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.Switch
import android.widget.TextView
import com.lemonhc.mplus.mcare_plus.R

class ListViewAdapter(val activity: Activity): BaseAdapter(){
    private val listViewItemList = ArrayList<ListViewItem>()

    override fun getView(positon: Int, convertView: View?, parent: ViewGroup): View {
        var convertView = convertView
        val pos = positon
        val context = parent.context

        // "listview_item" Layout을 inflate하여 convertView 참조 획득.
        if (convertView == null) {
            val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
            convertView = inflater.inflate(R.layout.lock_screen_cell, parent, false)
        }

        // 화면에 표시될 View(Layout이 inflate된)으로부터 위젯에 대한 참조 획득
        val titleTextView = convertView?.findViewById(R.id.text_menu_name) as TextView
        val descTextView = convertView.findViewById(R.id.text_description) as TextView
        val switchToggle = convertView.findViewById(R.id.switch_toggle) as Switch
        switchToggle.tag = positon

        // Data Set(listViewItemList)에서 position에 위치한 데이터 참조 획득
        val listViewItem = listViewItemList[positon]

        // 아이템 내 각 위젯에 데이터 반영
        titleTextView.text = listViewItem.strTitle
        descTextView.text = listViewItem.strDescription


        if (descTextView.text == null || descTextView.text == "") {
            descTextView.visibility = View.GONE
        }


        if (listViewItem.switchYN == true) {
            switchToggle.visibility = View.VISIBLE
            switchToggle.isChecked = listViewItem.toggleYn ?: false

            if (listViewItem.fixed ?: false) {
                switchToggle.isClickable = false
                switchToggle.isEnabled = false
            } else {
                switchToggle.isClickable = true
                switchToggle.isEnabled = true
            }

        } else {
            switchToggle.visibility = View.GONE
        }

        switchToggle.setOnCheckedChangeListener { buttonView, isChecked ->
            if (buttonView.tag as Int == 1) {

                //따로 유틸함수 클래스를 만들필요 있음, 일단은 여기다 씀.
                val pref = activity.getSharedPreferences("fingerprint", MODE_PRIVATE)
                val editor = pref.edit()
                editor.putBoolean("fingerprint", isChecked)
                editor.commit()
            }
        }
        return convertView
    }

    // 지정한 위치(position)에 있는 데이터와 관계된 아이템(row)의 ID를 리턴. : 필수 구현
    override fun getItemId(position: Int): Long {
        return position.toLong()
    }

    // 지정한 위치(position)에 있는 데이터 리턴 : 필수 구현
    override fun getItem(position: Int): Any {
        return listViewItemList[position]
    }

    // 아이템 데이터 추가를 위한 함수. 개발자가 원하는대로 작성 가능.
    fun addItem(title: String, description: String, switchYN: Boolean?, toggleYn: Boolean?, isFixed: Boolean?) {
        val item = ListViewItem()

        item.strTitle = title
        item.strDescription = description
        item.switchYN = switchYN
        item.toggleYn = toggleYn
        item.fixed = isFixed
        listViewItemList.add(item)
    }

    override fun getCount(): Int {
        return listViewItemList.size
    }
}