package kr.co.icontrols.iotplatform.adapter;

import android.content.Context;
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 java.util.List;

import kr.co.icontrols.iotplatform.DataClass.DeviceGroupInfo;
import kr.co.icontrols.iotplatform.DataClass.DeviceInfo;
import kr.co.icontrols.iotplatform.R;

import static kr.co.icontrols.iotplatform.utils.CommonUtils.getCircleBitmap;
import static kr.co.icontrols.iotplatform.utils.CommonUtils.getGroupImageResource;

public class GroupSelectAdapter extends BaseAdapter {
    // Adapter에 추가된 데이터를 저장하기 위한 ArrayList
    private List<DeviceGroupInfo> listViewItemList;

    // ListViewAdapter의 생성자
    public GroupSelectAdapter(List<DeviceGroupInfo> listItem) {
        listViewItemList = listItem;
    }

    public GroupSelectAdapter(List<DeviceGroupInfo> listItem, String selectGroupId) {
        listViewItemList = listItem;

        for(int i = 0; i < listViewItemList.size() ; i++) {
            if(selectGroupId.equals(listViewItemList.get(i).dgroupId)) {
                listViewItemList.get(i).isSelected = 1;
            }
        }
    }

    // Adapter에 사용되는 데이터의 개수를 리턴. : 필수 구현
    @Override
    public int getCount() {
        return listViewItemList==null?0:listViewItemList.size() ;
    }

    // position에 위치한 데이터를 화면에 출력하는데 사용될 View를 리턴. : 필수 구현
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final int pos = position;
        final Context context = parent.getContext();

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

        // 화면에 표시될 View(Layout이 inflate된)으로부터 위젯에 대한 참조 획득
        TextView txtGroupName = convertView.findViewById(R.id.txtGroupName);
        TextView txtDeviceCount = convertView.findViewById(R.id.txtDeviceCount);
        ImageView imgIcon = convertView.findViewById(R.id.imgIcon);
        ImageView imgChk = convertView.findViewById(R.id.imgChk);

        // Data Set(listViewItemList)에서 position에 위치한 데이터 입력
        txtGroupName.setText(listViewItemList.get(position).friendlyName);
        txtDeviceCount.setText(listViewItemList.get(position).deviceCount + "개 스마트 조명");
        imgIcon.setImageBitmap(getCircleBitmap(getGroupImageResource(listViewItemList.get(position).icon)));
        imgChk.setSelected(listViewItemList.get(position).isSelected());

        return convertView;
    }

    // 지정한 위치(position)에 있는 데이터와 관계된 아이템(row)의 ID를 리턴. : 필수 구현
    @Override
    public long getItemId(int position) {
        return position ;
    }

    // 지정한 위치(position)에 있는 데이터 리턴 : 필수 구현
    @Override
    public Object getItem(int position) {
        return listViewItemList.get(position) ;
    }

    public void setSelected(int position) {
        listViewItemList.get(position).isSelected = listViewItemList.get(position).isSelected()?0:1;
    }

    public void setSelectedForSingle(int position) {
        for(int i = 0 ; i < listViewItemList.size() ; i ++) {
            listViewItemList.get(i).isSelected = (position==i?1:0);
        }
    }

    public boolean isSelected() {
        boolean resault = false;

        for(DeviceGroupInfo d : listViewItemList) {
            if(d.isSelected()) {
                resault = true;
            }
        }
        return resault;
    }

    public void removeAll() {
        listViewItemList.clear();
    }
}