package com.reactlibrary.view;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Bundle;
import android.support.constraint.ConstraintLayout;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;

import com.reactlibrary.R;
import com.reactlibrary.adapter.VersionAdapter;
import com.reactlibrary.JSBundleManagerActivity;
import com.reactlibrary.model.Connection;

import java.util.ArrayList;

import static com.reactlibrary.util.FileUtil.retrieveConnectionListFromFile;

//import android.support.v7.widget.DividerItemDecoration;

public class ListConnectionActivity extends AppCompatActivity implements RecyclerItemTouchHelper.RecyclerItemTouchHelperListener {


    private RecyclerView recyclerView;
    private ArrayList<Connection> cartList;
    private VersionAdapter mAdapter;
    private ConstraintLayout coordinatorLayout;
    private static boolean isFirstTime;

    public static ArrayList<Connection> versionList = new ArrayList<>();

    @Override
    protected void onStart() {
        super.onStart();

    }

    @Override
    protected void onResume() {
        super.onResume();
        versionList.clear();
        retrieveConnectionListFromFile(getBaseContext());
        if(!versionList.isEmpty())
            cartList.addAll(versionList);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_connection);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        setTitle("Connections");
        initializeList();

    }

    public void startNewConnectionActivity(View view) {
        Intent newConnection = new Intent(view.getContext(),NewConnectionActivity.class);
        startActivityForResult(newConnection,2);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // handle arrow click here
        if (item.getItemId() == android.R.id.home) {
            finish(); // close this activity and return to preview activity (if there is any)
        }

        return super.onOptionsItemSelected(item);
    }
    private void initializeList() {


        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        coordinatorLayout = (ConstraintLayout) findViewById(R.id.coordinator_layout);
        cartList = new ArrayList<>();
        mAdapter = new VersionAdapter(this, cartList);

        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());

        recyclerView.setAdapter(mAdapter);

        //@Swipe Guestures need to implement

//        ItemTouchHelper.SimpleCallback itemTouchHelperCallback = new RecyclerItemTouchHelper(0, ItemTouchHelper.LEFT, this);
//        new ItemTouchHelper(itemTouchHelperCallback).attachToRecyclerView(recyclerView);

//        ItemTouchHelper.SimpleCallback itemTouchHelperCallback1 = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT | ItemTouchHelper.UP) {
//            @Override
//            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
//                return false;
//            }
//
//            @Override
//            public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
//                // Row is swiped from recycler view
//                // remove it from adapter
//            }
//
//            @Override
//            public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
//                super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
//            }
//
//
//        };

        recyclerView.addOnItemTouchListener(
                new RecyclerItemClickListener(getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() {
                    @Override
                    public void onItemClick(View view, int position) {
                                        Connection conn = (Connection) mAdapter.getItem(position);
                                        JSBundleManagerActivity.getBundleManager(getBaseContext()).setHostnameForRelativeDownloadURLs(conn.getConnectionUrl());
                                        JSBundleManagerActivity.getBundleManager(getBaseContext()).setUpdateMetadataUrl(conn.getConnectionUrl()+"/android"+"/"+JSBundleManagerActivity.getBundleManager(getBaseContext()).getmAppName()+"/update.json");

                                        JSBundleManagerActivity.getBundleManager(getBaseContext()).checkForUpdates();
                                        finish();
                    }
                })
        );

        // attaching the touch helper to recycler view
//        new ItemTouchHelper(itemTouchHelperCallback1).attachToRecyclerView(recyclerView);
        isFirstTime = true;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(resultCode == Activity.RESULT_OK){

            Bundle dataBundle =  data.getExtras();
            Connection newConnection  = dataBundle.getParcelable("URL");

            if(newConnection!=null) {
                addToListView(newConnection);
            }

        }
    }

    private void addToListView(Connection conn) {

           VersionAdapter adapter = (VersionAdapter) recyclerView.getAdapter();
            if(adapter!= null){
                adapter.add(conn);
                adapter.notifyDataSetChanged();


                Intent resultIntent =  getIntent();
                resultIntent.putExtra("URL",conn);
                setResult(RESULT_OK,resultIntent);
                finish();
            }
    }

    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction, int position) {
//        if (viewHolder instanceof VersionAdapter.MyViewHolder) {
//            // get the removed item name to display it in snack bar
//            String name = cartList.get(viewHolder.getAdapterPosition()).getName();
//
//            // backup of removed item for undo purpose
//            final Connection deletedItem = cartList.get(viewHolder.getAdapterPosition());
//            final int deletedIndex = viewHolder.getAdapterPosition();
//
//            // remove the item from recycler view
//            mAdapter.removeItem(viewHolder.getAdapterPosition());
//
//            // showing snack bar with Undo option
//            Snackbar snackbar = Snackbar
//                    .make(coordinatorLayout, name + " removed from cart!", Snackbar.LENGTH_LONG);
//            snackbar.setAction("UNDO", new View.OnClickListener() {
//                @Override
//                public void onClick(View view) {
//
//                    // undo is selected, restore the deleted item
//                    mAdapter.restoreItem(deletedItem, deletedIndex);
//                }
//            });
//            snackbar.setActionTextColor(Color.YELLOW);
//            snackbar.show();
//        }
    }
}
