/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.dhaval.appstatweb;

import com.dhaval.appstats.model.ApplicationQueryResult;
import com.dhaval.appstats.model.LocationQueryResult;
import com.dhaval.appstatweb.store.DataStore;
import com.google.gson.Gson;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author dhaval
 */
public class Query extends HttpServlet {

    private DataStore dataStore;
    private Gson gson;

    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);

        gson = new Gson();
        dataStore = new DataStore();
    }


    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            if(request.getParameter("id") == null){
                List<Map<String, Object>> locations = dataStore.getPhoneLocations();
                if (locations.isEmpty()) {
                    Map<String, Object> tempLocation = new HashMap<String, Object>();
                    tempLocation.put("addr", "Citylight, Surat, Gujarat, India");
                    tempLocation.put("lat", "0.0");
                    tempLocation.put("lan", "0.0");
                    tempLocation.put("id", "00000000");
                    locations.add(tempLocation);
                }
                LocationQueryResult result = new LocationQueryResult(locations);
                
                out.println(gson.toJson(result));
            }else{
                String id = request.getParameter("id");
                List<Map<String, Object>> applications = dataStore.getApplications(id);
                if(applications.isEmpty()){
                    String[] names = new String[]{"com.dhaval.android.wallpaper", "com.dhaval.android.appstats", "com.dhaval.android.impcalls", "com.dhaval.android.wallpaper", "com.dhaval.android.appstats", "com.dhaval.android.impcalls", "com.dhaval.android.wallpaper", "com.dhaval.android.appstats", "com.dhaval.android.impcalls", "com.dhaval.android.wallpaper", "com.dhaval.android.appstats", "com.dhaval.android.impcalls", "com.dhaval.android.wallpaper", "com.dhaval.android.appstats", "com.dhaval.android.impcalls", "com.dhaval.android.wallpaper", "com.dhaval.android.appstats", "com.dhaval.android.impcalls"};
                    String[] labels = new String[]{"Wallpapers", "AppStats", "ImpCalls", "Wallpapers", "AppStats", "ImpCalls", "Wallpapers", "AppStats", "ImpCalls", "Wallpapers", "AppStats", "ImpCalls", "Wallpapers", "AppStats", "ImpCalls", "Wallpapers", "AppStats", "ImpCalls"};

                    for (int i = 0; i < names.length; i++) {
                        Map<String, Object> tempLocation = new HashMap<String, Object>();
                        tempLocation.put("id", "00000000");
                        tempLocation.put("name", names[i]);
                        tempLocation.put("label", labels[i]);
                        applications.add(tempLocation);
                    }
                }
                ApplicationQueryResult result = new ApplicationQueryResult(applications);
                out.println(gson.toJson(result));
            }
            
        } catch(Exception e){
            e.printStackTrace();
        } finally {
            out.close();
        }
    } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
