package kr.co.icontrols.iotplatform.adapter;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
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.ArrayList;

import kr.co.icontrols.iotplatform.AdminMemberActivity;
import kr.co.icontrols.iotplatform.DataClass.MemberInfo;
import kr.co.icontrols.iotplatform.DataClass.UserInfo;
import kr.co.icontrols.iotplatform.PopupActivity;
import kr.co.icontrols.iotplatform.R;
import kr.co.icontrols.iotplatform.utils.DownloadImageTask;

import static kr.co.icontrols.iotplatform.utils.Constants.RESULT_CONFIRM_DELETE_MEMBER;
import static kr.co.icontrols.iotplatform.utils.Constants.RESULT_CONFIRM_SEND_INVITE_MSG;

public class MemberAdapter extends BaseAdapter {

    private Context context;

    // Adapter에 추가된 데이터를 저장하기 위한 ArrayList
    private ArrayList<MemberInfo> listViewItem = new ArrayList<MemberInfo>();

    // ListviewTotalAdapter 생성자
    public MemberAdapter(Context context) {
        this.context = context;
    }

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

    // position에 위치한 데이터를 화면에 출력하는데 사용될 View를 리턴. : 필수 구현
    @Override
    public View getView(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_memberinfo_item, parent, false);

        final TextView txtName = convertView.findViewById(R.id.txtName);
        TextView txtDelete = convertView.findViewById(R.id.txtDelete);
        ImageView imgProfile = convertView.findViewById(R.id.imgProfile);

        txtName.setText(listViewItem.get(position).nickname);
        if(listViewItem.get(position).profile != null && !listViewItem.get(position).profile.isEmpty()) {
            new DownloadImageTask(imgProfile).execute(listViewItem.get(position).profile);
        } else {
            imgProfile.setImageResource(R.drawable.profile_thum_176);
        }
        txtDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(context, PopupActivity.class);
                intent.putExtra(PopupActivity.POPUP_MODE, PopupActivity.MODE_YESNO);
                intent.putExtra(PopupActivity.POPUP_TITLE_TEXT, txtName.getText().toString() + "님을 멤버에서 삭제하시겠습니까?");
                AdminMemberActivity.sSelectedMemberId = listViewItem.get(pos).customerId;
                ((Activity)context).startActivityForResult(intent, RESULT_CONFIRM_DELETE_MEMBER);
            }
        });

        return convertView;
    }

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

    /**
     * 지정한 포지션의 아이템 획득.
     * @param position
     * @return
     */
    @Override
    public Object getItem(int position) {
        return listViewItem.get(position);
    }

    public ArrayList<MemberInfo> getAllItem() {
        return listViewItem;
    }

    /**
     * 아이템 추가 함수.
     * @param item
     */
    public void addItem(MemberInfo item) {
        listViewItem.add(item);
    }

    /**
     * 리스트에 특정 아이템 삭제.
     */
    public void removeItem(String customerId) {
        for(int i = 0 ; i < listViewItem.size() ; i++) {
            if(listViewItem.get(i).customerId.equals(customerId)) {
                listViewItem.remove(i);
                i--;
            }
        }
    }

    /**
     * 리스트에 활당된 모든 아이템에 대한 메모리 반환.
     */
    public void removeAllItem() {
        if (listViewItem != null) {
            listViewItem.clear();
        }
    }
}