package com.espressif.ui.adapters;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.core.content.ContextCompat;

import com.espressif.provisioning.ESPConstants;
import com.espressif.provisioning.WiFiAccessPoint;
import com.espressif.wifi_provisioning.R;

import java.util.ArrayList;

public class WiFiListAdapter extends ArrayAdapter<WiFiAccessPoint> {

    private Context context;
    private ArrayList<WiFiAccessPoint> wifiApList;

    public WiFiListAdapter(Context context, int resource, ArrayList<WiFiAccessPoint> wifiList) {
        super(context, resource, wifiList);
        this.context = context;
        this.wifiApList = wifiList;
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        WiFiAccessPoint wiFiAccessPoint = wifiApList.get(position);

        //get the inflater and inflate the XML layout for each item
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.item_wifi_access_point, null);

        TextView wifiNameText = view.findViewById(R.id.tv_wifi_name);
        ImageView rssiImage = view.findViewById(R.id.iv_wifi_rssi);
        ImageView lockImage = view.findViewById(R.id.iv_wifi_security);

        wifiNameText.setText(wiFiAccessPoint.getWifiName());
        rssiImage.setImageLevel(getRssiLevel(wiFiAccessPoint.getRssi()));

        if (wiFiAccessPoint.getSecurity() == ESPConstants.WIFI_OPEN) {
            lockImage.setVisibility(View.GONE);
        } else {
            lockImage.setVisibility(View.VISIBLE);
        }

        if (wiFiAccessPoint.getWifiName().equals(context.getString(R.string.join_other_network))) {

            wifiNameText.setTextColor(ContextCompat.getColor(context.getApplicationContext(), R.color.colorPrimary));
            rssiImage.setVisibility(View.VISIBLE);
            rssiImage.setImageResource(R.drawable.ic_right_arrow);
        }

        return view;
    }

    private int getRssiLevel(int rssiValue) {

        if (rssiValue > -50) {
            return 3;
        } else if (rssiValue >= -60) {
            return 2;
        } else if (rssiValue >= -67) {
            return 1;
        } else {
            return 0;
        }
    }
}