package com.mycompany.flightstatuslistview.homeScreen;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.mycompany.flightstatuslistview.FlightViewModel;
import com.mycompany.flightstatuslistview.R;

import java.util.ArrayList;



 interface HomeActivityInput {
    void displayHomeMetaData(HomeViewModel viewModel);
}

//interface HomeRouterOutput {
//    ArrayList<FlightViewModel> listOfVMFlights = null;
//     HomeRouter router = null;
//}



public class HomeActivity extends AppCompatActivity implements HomeActivityInput {

    public ArrayList<FlightViewModel> listOfVMFlights;

    HomeInteractorInput output;
    HomeRouter router;

    public static String TAG = HomeActivity.class.getSimpleName();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();

        HomeConfigurator.INSTANCE.configure(this);
        fetchMetaData();
        createFlightListView();
    }

    public void fetchMetaData() {
        // create Request and set the needed input
        HomeRequest homeRequest = new HomeRequest();
        homeRequest.isFutureTrips = true;
        // Call the output to fetch the data
        output.fetchHomeMetaData(homeRequest);
    }

    private void createFlightListView() {
        ListView listView = (ListView) findViewById(R.id.listOfFlights);
        listView.setAdapter(new FlightListAdapter());
        listView.setClickable(true);
        listView.setOnItemClickListener(router);
    }

    @Override
    public void displayHomeMetaData(HomeViewModel viewModel) {
        Log.e(TAG, "displayHomeMetaData() called with: viewModel = [" + viewModel + "]");
        listOfVMFlights = viewModel.listOfFlights;
    }





    private class FlightListAdapter extends BaseAdapter {

        private LayoutInflater layoutInflater;

        FlightListAdapter(){
            layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        }
        @Override
        public int getCount() {
            return listOfVMFlights.size();
        }

        @Override
        public Object getItem(int position) {
            return listOfVMFlights.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

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

            if(convertView == null){
                convertView = layoutInflater.inflate(R.layout.cell_trip_list,null);
                ViewHolder viewHolder = new ViewHolder();
                viewHolder.flightNameTextView = (TextView) convertView.findViewById(R.id.tv_flightNumberValue);
                viewHolder.startTimeTextView = (TextView) convertView.findViewById(R.id.tv_flightTimeDescription);
                convertView.setTag(viewHolder);
            }
            ViewHolder viewHolder = (ViewHolder) convertView.getTag();
            viewHolder.flightNameTextView.setText( listOfVMFlights.get(position).flightName);
            viewHolder.startTimeTextView.setText( listOfVMFlights.get(position).noOfDaysToFly);
            return convertView;
        }
    }

    class ViewHolder {
        TextView flightNameTextView;
        TextView startTimeTextView;
    }
}