package org.janb.shoppinglist.fragments;

import android.app.ListFragment;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import org.janb.shoppinglist.R;
import org.json.JSONArray;
import org.json.JSONException;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class FavoriteListFragment extends ListFragment implements AdapterView.OnItemLongClickListener {

    private ListView mListView;
    private List<String> favorites;
    private Context context;

    public FavoriteListFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle(getResources().getString(R.string.title_favorites));
        context = getActivity().getApplicationContext();
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_favorites, container, false);
        mListView = (ListView) rootView.findViewById(android.R.id.list);
        mListView.setEmptyView(rootView.findViewById(android.R.id.empty));
        mListView.setLongClickable(true);
        mListView.setOnItemLongClickListener(this);
        return rootView;
    }

    public void setEmptyText(CharSequence emptyText) {
        View emptyView = mListView.getEmptyView();

        if (emptyView instanceof TextView) {
            ((TextView) emptyView).setText(emptyText);
        }
    }

    public void generateList() {
        final String[] content = new String[ favorites.size() ];
        favorites.toArray(content);
        ArrayAdapter<String> stringAdapter = new ArrayAdapter<String>(
                context,
                R.layout.row_favorites,
                R.id.text,
                new ArrayList<>(Arrays.asList(content))
        );
        setListAdapter(stringAdapter);
    }

    public void onListItemClick(ListView l, View view, final int position, long id) {
        super.onListItemClick(l, view, position, id);
        Toast.makeText(context, context.getResources().getString(R.string.favorite_delete_notice), Toast.LENGTH_SHORT).show();
}

    @Override
    public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long l) {
        removeFromFavorites(favorites.get(position));
        return true;
    }

    private void removeFromFavorites(String itemName) {
        favorites.remove(itemName);
        SharedPreferences prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE);
        JSONArray jsArray = new JSONArray(favorites);
        prefs.edit().putString("favorites", jsArray.toString()).apply();
        favorites = getFavorites();
        generateList();
    }


    @Override
    public void onStart(){
        super.onStart();
        favorites = getFavorites();
        if(favorites.isEmpty()){
            setEmptyText(getResources().getString(R.string.empty_view_favorites));
        } else {
            generateList();
        }
    }

    private List<String> getFavorites() {
        SharedPreferences prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE);
        JSONArray jsonArray;
        favorites = new ArrayList<>();
        try {
            jsonArray = new JSONArray(prefs.getString("favorites", ""));

            for (int i=0; i<jsonArray.length(); i++) {
                favorites.add( jsonArray.getString(i) );
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return favorites;
    }
}