package edu.uoc.prezmm.a1list2cook;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.RequestParams;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

import cz.msebera.android.httpclient.Header;
import edu.uoc.prezmm.a1list2cook.objects_class.Categories;
import edu.uoc.prezmm.a1list2cook.objects_class.Users;

public class RecipesSearchActivity extends BaseActivity {

    private ArrayList<Categories> categoriesArrayList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //Defineix el contingut del layout de la Activity dins el frame de la classe pare
        setLayoutToBaseFrame(R.layout.activity_recipes_search);

        setToolBarTitle("Cercar receptes");

        getCategories();
    }

    //Recupera les categories creades
    private void getCategories() {
        //Recupera la informació necessaria de l'usuari
        SharedPreferences prefs = getSharedPreferences("UserInfo", Context.MODE_PRIVATE);
        Users userInfo = new Users(prefs);
        String userCode = userInfo.getUserCode();

        //Parametres per passar al WebService
        RequestParams params = new RequestParams();
        params.put("userCode", userCode);

        //Inicialitza l'array necessari
        categoriesArrayList = new ArrayList<Categories>();

        //Missatge mentre s'està executant el procés de validació
        final ProgressDialog progressDialog = new ProgressDialog(this);

        //Creació de la connexió amb el WebService
        AsyncHttpClient client = new AsyncHttpClient();
        client.get("http://1list2cook.com/webservices/categories_list.php", params, new JsonHttpResponseHandler() {
            @Override
            public void onStart() {
                progressDialog.setMessage("Recuperant categories...");
                progressDialog.show();
            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                progressDialog.dismiss();
                try {
                    JSONObject jsonArray = new JSONObject(response.toString());
                    if (jsonArray.get("success").toString().equalsIgnoreCase("1")) {
                        JSONArray userInfo = new JSONArray(jsonArray.get("message").toString());

                        //Guardar info per generar un nou objecte
                        for(int i = 0; i < userInfo.length(); i++) {
                            String cateCode = userInfo.getJSONObject(i).get("cateIden").toString();
                            String cateName = userInfo.getJSONObject(i).get("cateName").toString();

                            //Crea el nou objecte amb la informació de la categoria
                            Categories cateInfo = new Categories(cateCode, cateName);

                            //Introdueix la recepta a l'array
                            categoryToArray(cateInfo);
                        }

                        //Vincula els elements amb el spinner i atribueix les funcions del botó
                        searchRecipes();

                    } else {
                        showMessage(jsonArray.get("message").toString());
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, String res, Throwable t) {
                progressDialog.dismiss();
                showMessage("No s'ha pogut gestionar l'operació, intenta-ho de nou. Disculpa les molèsties.");
            }
        });
    }

    //Afegeix una categoria a l'array de categories
    private void categoryToArray(Categories category) {
        categoriesArrayList.add(category);
    }

    //Vincula els elements amb el spinner i atribueix les funcions del botó
    private void searchRecipes(){
        //Declaració dels elements
        final EditText recipeNameField = (EditText)findViewById(R.id.recipeNameField);
        final Spinner categoriesSpinner = (Spinner)findViewById(R.id.recipeCategorySpinner);
        final Button buttonSubmit = (Button)findViewById(R.id.buttonSubmit);

        //Recupera les categories per el Spinner
        String[] options = new String[categoriesArrayList.size() + 1];
        options[0] = "Escull una categoria";
        for(int i = 0; i < categoriesArrayList.size();i++) {
            options[i + 1] = categoriesArrayList.get(i).getName();
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, options);
        categoriesSpinner.setAdapter(adapter);

        //Assignació del event clic al botó
        buttonSubmit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String reciName = "", cateCode = "";

                if (!recipeNameField.getText().toString().isEmpty()) reciName = recipeNameField.getText().toString();

                int catePosi = categoriesSpinner.getSelectedItemPosition();
                if(catePosi != 0) cateCode = String.valueOf(categoriesArrayList.get(catePosi - 1).getCode());

                changeActivity(RecipesListActivity.class,"idCategory",cateCode,"reciName",reciName);
            }
        });
    }
}
