package androdns.android.leetdreams.ch.androdns;

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

import org.xbill.DNS.InvalidTypeException;
import org.xbill.DNS.Type;


/**
 * Created by gryphius on 30.04.17.
 */

public class BookmarkedQueriesAdapter extends ArrayAdapter<Session> {

    private final Context context;
    private final Session[] values;

    public BookmarkedQueriesAdapter(Context context, Session[] values) {
        super(context, -1, values);
        this.context = context;
        this.values = values;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.sessiondisplay_bookmark, parent, false);


        Session session = values[position];

        String qname = session.qname;
        if (!session.server.equals("")){
            qname = qname+"@"+session.server;
        }
        if(!session.isDefaultPort()){
            qname = qname+":"+session.port;
        }

        ((TextView) rowView.findViewById(R.id.bookmarked_qname)).setText(qname);

        String type = ""+session.qtype;
        try {
            String txtType = Type.string(session.qtype);
            if (!type.equals(txtType)) {
                type = type + "(" + txtType + ")";
            }
        } catch (InvalidTypeException e) {}
        ((TextView) rowView.findViewById(R.id.bookmarked_qtype)).setText(type);

        StringBuffer flagsBuffer = new StringBuffer();

        // add proto to flags view if not DNS
        if (!session.protocol.equalsIgnoreCase("DNS")){
            flagsBuffer.append(session.protocol);
            flagsBuffer.append(" ");
        }

        // add qclass to flags view if not IN
        if (!session.qclass.equalsIgnoreCase("IN")){
            flagsBuffer.append(session.qclass);
            flagsBuffer.append(" ");
        }

        if (session.flag_RD){
            flagsBuffer.append("RD ");
        }
        if (session.flag_CD){
            flagsBuffer.append("CD ");
        }
        if(session.flag_DO){
            flagsBuffer.append("DO ");
        }
        if(session.TCP && session.protocol.equalsIgnoreCase("DNS")){
            flagsBuffer.append("TCP ");
        }

        ((TextView) rowView.findViewById(R.id.bookmarked_flags)).setText(flagsBuffer.toString());
        return rowView;
    }


}