/*
 * Copyright (c) 2009 - DHTMLX, All rights reserved
 */
package com.dhtmlx.connector;

import java.io.IOException;

import javax.servlet.http.*;
import javax.servlet.*;

/**
 * The Class ConnectorServlet.
 * 
 * Extends default servlet to simplify operations. 
 * Automatically assign request and response objects to the connector.
 */
public abstract class ConnectorServlet extends HttpServlet {

    /** The Constant serialVersionUID. */
    private static final long serialVersionUID = -6509163446916007821L;

    /* (non-Javadoc)
     * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
     */
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        String id = req.getParameter("ids");
        String status = req.getParameter(id + "_!nativeeditor_status");
        String personId = req.getParameter("personId");
        String mergeUsers = req.getParameter("mergeUsers");
        String loggedinId = req.getParameter("userId");
        System.out.println("loggedinId===========================" + loggedinId);
        BaseConnector.global_http_request = req;
        BaseConnector.global_http_response = res;
        // System.out.println("!nativeeditor_status in connector servlet======================"+req.getParameter("!nativeeditor_status"));

        System.out.println("id=====" + id + "==" + status + "==" + personId);
        if (id != null && !"null".equalsIgnoreCase(id) && !"".equalsIgnoreCase(id) && status != null && !"null".equalsIgnoreCase(status) && !"".equalsIgnoreCase(status)) {


            /*if(id==null || "null".equalsIgnoreCase(id) || "".equalsIgnoreCase(id)){
            return;
            }*/

            if (personId == null || "null".equalsIgnoreCase(personId) || "".equalsIgnoreCase(personId)) {
                return;
            }

            int calendarId = Integer.parseInt(personId);


            String start_date = req.getParameter(id + "_start_date");
            String end_date = req.getParameter(id + "_end_date");
            String url = req.getParameter(id + "_url");
            String tags = req.getParameter(id + "_tags");
            String comments = req.getParameter(id + "_comments");
            String userId = req.getParameter(id + "_userId");
            String event_name = req.getParameter(id + "_text");
            String eventType = req.getParameter(id + "_eventType");
            String itemId = req.getParameter(id + "_itemId");
            String source = req.getParameter(id + "_source");


            if (status != null && !"null".equalsIgnoreCase(status) && "updated".equalsIgnoreCase(status)) {
                int eventId = Integer.parseInt(id);
                updateBookMark(event_name, comments, userId, url, start_date, tags, end_date, eventId, calendarId);
            } else if (status != null && !"null".equalsIgnoreCase(status) && "inserted".equalsIgnoreCase(status)) {
                insertBookMark(event_name, comments, url, tags, userId, start_date, end_date, itemId, eventType, source, calendarId);
            } else if (status != null && !"null".equalsIgnoreCase(status) && "deleted".equalsIgnoreCase(status)) {
                int eventId = Integer.parseInt(id);
                deleteEvent(eventId, calendarId);
            }


        }

        if (mergeUsers == null || "null".equalsIgnoreCase(mergeUsers) || "".equalsIgnoreCase(mergeUsers)) {
            if (personId == null || "null".equalsIgnoreCase(personId) || "".equalsIgnoreCase(personId)) {
                return;
            }
        }

        configure(loggedinId, Integer.parseInt(personId), mergeUsers);
    }
    /* (non-Javadoc)
     * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
     */

    public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        doGet(req, res);
    }

    /**
     * Configure connector
     *
     * This method need to be defined in result servlet
     * Here, the actual connector instance must be created.
     */
    abstract protected void configure(String userId, int calendarId, String mergeUsers);

    abstract protected void updateBookMark(String eventName, String comments, String userId, String url, String start_date, String tags, String end_date, int Id, int personId);

    abstract protected void insertBookMark(String eventName, String comments, String url, String tags, String userId, String start_date, String end_date, String itemId, String eventType, String source, int personId);

    abstract protected void deleteEvent(int Id, int personId);
}
