package monnethic.mobile.restApi;

import android.util.Log;

import org.json.JSONObject;

import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;

import monnethic.mobile.database.User;

public class UserApiHandler {

    public JSONObject registerUser(User u){ //return JSON with session ID
        HttpCallHandler httpCallHandler = new HttpCallHandler();
        try{
            String url = Config.USER_REGISTER;
            Map<String, String> map = new HashMap<>();

            map.put("name",u.getName());
            map.put("firstname",u.getFirstname());
            map.put("email",u.getEmail());
            map.put("phone",u.getPhone());
            map.put("association",u.getAssociation());
            map.put("password",u.getPassword());

            String responseCall = httpCallHandler.postHttp(new URL(url), map);
            JSONObject jsonObject = new JSONObject(responseCall);
            u.setUser_hash(jsonObject.getString("user_hash"));
            Log.i("UserApiHandler-register","user_hash :"+jsonObject.getString("user_hash"));

            JSONObject jsonReturn = new JSONObject();
            jsonReturn.put("user_hash",u.getUser_hash());
            //jsonReturn.put("session_id",String.valueOf(jsonObject.getString("session_id"))); //TODO
            jsonReturn.put("session_id",String.valueOf(0));

            return jsonReturn;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    public JSONObject loginUser(User u){ //return JSON with session ID
        HttpCallHandler httpCallHandler = new HttpCallHandler();
        try{
            String url = Config.USER_LOGIN;
            Map<String, String> map = new HashMap<>();
            map.put("email",u.getEmail());
            map.put("password",u.getPassword());

            String responseCall = httpCallHandler.postHttp(new URL(url), map);
            JSONObject jsonObject = new JSONObject(responseCall);
            if(jsonObject.getInt("status")!=200){
                return jsonObject;
            } else {
                System.out.println("OUT OUT OUT / "+jsonObject.toString());
                u.setUser_hash(jsonObject.getString("user_hash"));
                JSONObject jsonReturn = new JSONObject();
                jsonReturn.put("status",200);
                jsonReturn.put("user_hash",u.getUser_hash());
                //jsonReturn.put("session_id",String.valueOf(jsonObject.getString("session_id"))); //TODO
                jsonReturn.put("session_id",String.valueOf(0));

                return jsonReturn;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    public Boolean checkUser(String email){
        HttpCallHandler httpCallHandler = new HttpCallHandler();
        Boolean response = null;
        try{
            String url = Config.USER_GET+"?user_email="+email;
            String responseCall = httpCallHandler.getHttp(new URL(url));
            response = new JSONObject(responseCall).getBoolean("response");
        }catch (Exception e){
            e.printStackTrace();
        }
        return response;
    }


    public User getUser(int method, String email, String phone){
        HttpCallHandler httpCallHandler = new HttpCallHandler();
        User returnUser = new User();
        try{
            String responseCall="";
            if(method==1){
                String url = Config.FIND_BY_EMAIL+"?email="+email;
                responseCall = httpCallHandler.getHttp(new URL(url));
            }else if(method==2){
                String url = Config.FIND_BY_PHONE+"?phone="+phone;
                responseCall = httpCallHandler.getHttp(new URL(url));
            } else {
                String url = Config.FIND_BY_EMAIL_AND_PHONE+"?email="+email+"&phone="+phone;
                responseCall = httpCallHandler.getHttp(new URL(url));
            }

            if(responseCall!=""){
                JSONObject jsonObject = new JSONObject(responseCall);
                returnUser.setName(jsonObject.getString("name"));
                returnUser.setFirstname(jsonObject.getString("firstname"));
                returnUser.setUser_hash(jsonObject.getString("user_hash"));

                return returnUser;
            }else{
                return null;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

}