package com.example.test;

import android.content.SharedPreferences;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.lang.reflect.Type;
import java.util.ArrayList;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class MainActivity extends AppCompatActivity
{
    public ArrayList<Player> data = new ArrayList<>();
    public PlayerAdapter adapter;
    public RecyclerView recyclerView;

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

        ActionBar actionBar = getSupportActionBar();
        actionBar.setTitle("  4 Words Action Bar");
        actionBar.setBackgroundDrawable(new ColorDrawable(0xFFBA55D3));
        actionBar.setSubtitle("  Add or Save a New Player");
        actionBar.setIcon(R.drawable.outline_crossword_24);
        actionBar.setDisplayUseLogoEnabled(true);
        actionBar.setDisplayShowHomeEnabled(true);

        loadData();

        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        adapter = new PlayerAdapter(data, this);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(adapter);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        getMenuInflater().inflate(R.menu.menu, menu);
        return super.onCreateOptionsMenu(menu);
    }

    public boolean onOptionsItemSelected(MenuItem item)
    {
        if (item.getItemId() == R.id.addPlayer)
        {
            AddFlashcardDialog();
            return true;
        }
        else if (item.getItemId() == R.id.savePlayer)
        {
            saveData();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    private void addPlayer(String n)
    {
        Player newItem = new Player(n);

        data.add(newItem);
        adapter.notifyItemInserted(data.size() - 1);
        recyclerView.scrollToPosition(data.size() - 1);
    }

    //This uses an AlertDialog as a popup to ask what the front and back of the new Flashcard is going to be.
    private void AddFlashcardDialog()
    {
        LayoutInflater inflater = LayoutInflater.from(this);
        View dialogView = inflater.inflate(R.layout.newplayer, null);

        EditText name = dialogView.findViewById(R.id.newPlayer);

        new AlertDialog.Builder(this).setTitle("Create New Flashcard").setView(dialogView).setPositiveButton("Add", (dialog, which) ->
                {
                    String newName = name.getText().toString().trim();

                    if (!newName.isEmpty())
                    {
                        addPlayer(newName);
                    } else
                    {
                        Toast.makeText(this, "Enter Question/Answer", Toast.LENGTH_SHORT).show();
                    }
                })
                .setNegativeButton("Cancel", null)
                .show();
    }

    public void saveData()
    {
        SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);

        SharedPreferences.Editor editor = sharedPreferences.edit();

        Gson gson = new Gson();

        String json = gson.toJson(data);

        editor.putString("players", json);

        editor.apply();

        Toast.makeText(this, "Saved Array List to Shared preferences. ", Toast.LENGTH_SHORT).show();
    }

    public void loadData()
    {
        SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);

        Gson gson = new Gson();

        String json = sharedPreferences.getString("players", null);

        Type type = new TypeToken<ArrayList<Player>>() {}.getType();

        data = gson.fromJson(json, type);

        if (data == null)
        {
            data = new ArrayList<>();
        }
    }
}