package jp.co.sint.servlet.mallmgr;

import java.io.IOException;
import java.sql.SQLException;

import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import jp.co.sint.basic.SILogin;
import jp.co.sint.beans.mallmgr.UIRegClosedSaleItem;
import jp.co.sint.beans.mallmgr.UIRegRecommendItem;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDatabaseConnection;
import jp.co.sint.servlet.SIServlet;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIErrorFactory;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIURLParameter;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;

public class SIRegRecommendItemSrv extends SIServlet {
  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  /**
   * <b>doUpdate</b> HTTP リクエストの処理
   * 
   * @param request リクエスト
   * @param response
   * @return なし
   * @throws ServletException
   * @throws IOException
   */
  public void doUpdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    SILogin manLogin = SIHTMLUtil.getLogin(request);
    if (!manLogin.isLogin()) {
      forwardKey(request, response, "webshop.jsp.manager.login");
      return;
    }
    
    HttpSession session = request.getSession(true);
    SIDatabaseConnection databaseConnection = new SIDatabaseConnection();
    SIURLParameter urlParam = new SIURLParameter(request);
    
    try {
      String actionName = this.getActionName(urlParam);
      UIRegRecommendItem recommendItem = new UIRegRecommendItem();
      UIRegClosedSaleItem saleItem = new UIRegClosedSaleItem();
      
      if (this.getServletPath(request).equals("/mallmgr/RegRecommendItem")) {
        if (SIUtil.isNull(actionName)||SIConfig.SIACTION_LIST.equalsIgnoreCase(actionName)) {
          recommendItem.initInsert(urlParam);
          session.setAttribute(SIConfig.SISESSION_MAN_RECOMMEND_NAME, recommendItem);
          forwardKey(request, response, "webshop.jsp.manager.recommend");
        }else if (SIConfig.SIACTION_NEW.equalsIgnoreCase(actionName)) {
          recommendItem.initInsert(urlParam);
          if (!recommendItem.validateInsert(request, databaseConnection.getConnection())) {
            session.setAttribute(SIConfig.SISESSION_MAN_RECOMMEND_NAME, recommendItem);
            forwardKey(request, response, "webshop.jsp.manager.recommend");
          } else {
            try {
              recommendItem.insertItem(databaseConnection.getConnection());
              session.setAttribute(SIConfig.SISESSION_MAN_RECOMMEND_NAME, recommendItem);
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException sqle) {}
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.insert"));
              session.setAttribute(SIConfig.SISESSION_MAN_RECOMMEND_NAME, recommendItem);
              forwardKey(request, response, "webshop.jsp.manager.recommend");
            } catch (Exception e) {
              try {databaseConnection.getConnection().rollback();} catch (SQLException ee) {}
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.execute.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              session.setAttribute(SIConfig.SISESSION_MAN_RECOMMEND_NAME, recommendItem);
              forwardKey(request, response, "webshop.jsp.manager.recommend");
            }
          }
        }else if (SIConfig.SIACTION_DELETE.equalsIgnoreCase(actionName)) {
          recommendItem.initDelete(urlParam);
          try {
            recommendItem.deleteItem(databaseConnection.getConnection());
            session.setAttribute(SIConfig.SISESSION_MAN_RECOMMEND_NAME, recommendItem);
            try {
              databaseConnection.getConnection().commit();
            } catch (SQLException sqle) {}
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.delete"));
            session.setAttribute(SIConfig.SISESSION_MAN_RECOMMEND_NAME, recommendItem);
            forwardKey(request, response, "webshop.jsp.manager.recommend");
          } catch (Exception e) {
            try {databaseConnection.getConnection().rollback();} catch (SQLException ee) {}
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("database.execute.error"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            session.setAttribute(SIConfig.SISESSION_MAN_RECOMMEND_NAME, recommendItem);
            forwardKey(request, response, "webshop.jsp.manager.recommend");
          }
        }else if (SIConfig.SIACTION_MODIFY.equalsIgnoreCase(actionName)) {
          recommendItem.initModify(request,urlParam);
          if (!recommendItem.validateModify(request, databaseConnection.getConnection())) {
            session.setAttribute(SIConfig.SISESSION_MAN_RECOMMEND_NAME, recommendItem);
            forwardKey(request, response, "webshop.jsp.manager.recommend");
          } else {
            try {
              recommendItem.modifyItem(databaseConnection.getConnection());
              session.setAttribute(SIConfig.SISESSION_MAN_RECOMMEND_NAME, recommendItem);
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException sqle) {}
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.modify"));
              session.setAttribute(SIConfig.SISESSION_MAN_RECOMMEND_NAME, recommendItem);
              forwardKey(request, response, "webshop.jsp.manager.recommend");
            } catch (Exception e) {
              try {databaseConnection.getConnection().rollback();} catch (SQLException ee) {}
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.execute.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              session.setAttribute(SIConfig.SISESSION_MAN_RECOMMEND_NAME, recommendItem);
              forwardKey(request, response, "webshop.jsp.manager.recommend");
            }
          }
        }
      } else if (this.getServletPath(request).equals("/mallmgr/RegClosedSale")) {
        if (SIUtil.isNull(actionName)) {
          saleItem.reset(databaseConnection.getConnection());
          session.setAttribute(SIConfig.SISESSION_MAN_CLOSED_SALE_NAME, saleItem);
          forwardKey(request, response, "webshop.jsp.manager.closedsale");
        }else if (actionName.equalsIgnoreCase(SIConfig.SIACTION_ADD)){
          saleItem.init(request,urlParam);
          if (saleItem.validateAdd(request,databaseConnection.getConnection())) {
            try {
              saleItem.executeAdd(databaseConnection.getConnection());
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException sqle) {}
              saleItem.setIndividualCode1Txt("");
              saleItem.setIndividualCode2Txt("");
              saleItem.setIndividualCode3Txt("");
              session.setAttribute(SIConfig.SISESSION_MAN_CLOSED_SALE_NAME, saleItem);
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.insert"));
              forwardKey(request, response, "webshop.jsp.manager.closedsale");
            } catch (Exception e) {
              try {databaseConnection.getConnection().rollback();} catch (SQLException ee) {}
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.execute.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              session.setAttribute(SIConfig.SISESSION_MAN_CLOSED_SALE_NAME, saleItem);
              forwardKey(request, response, "webshop.jsp.manager.closedsale");
            }
          }else{
            session.setAttribute(SIConfig.SISESSION_MAN_CLOSED_SALE_NAME, saleItem);
            forwardKey(request, response, "webshop.jsp.manager.closedsale");
          }
        }else if (actionName.equalsIgnoreCase(SIConfig.SIACTION_DELETE)){
          saleItem.init(request,urlParam);
          try {
            saleItem.executeDelete(databaseConnection.getConnection());
            try {
              databaseConnection.getConnection().commit();
            } catch (SQLException sqle) {}
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.delete"));
            forwardKey(request, response, "webshop.jsp.manager.closedsale");
          } catch (Exception e) {
            try {databaseConnection.getConnection().rollback();} catch (SQLException ee) {}
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("database.execute.error"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            forwardKey(request, response, "webshop.jsp.manager.closedsale");
          }
        }else if (actionName.equalsIgnoreCase(SIConfig.SIACTION_MODIFY)){
          saleItem.init(request,urlParam);
          if (saleItem.validateModify(request)) {
            try {
              saleItem.executeModify(databaseConnection.getConnection());
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException sqle) {}
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.modify"));
              session.setAttribute(SIConfig.SISESSION_MAN_CLOSED_SALE_NAME, saleItem);
              forwardKey(request, response, "webshop.jsp.manager.closedsale");
            } catch (Exception e) {
              try {databaseConnection.getConnection().rollback();} catch (SQLException ee) {}
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.execute.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              session.setAttribute(SIConfig.SISESSION_MAN_CLOSED_SALE_NAME, saleItem);
              forwardKey(request, response, "webshop.jsp.manager.closedsale");
            }
          }else{
            session.setAttribute(SIConfig.SISESSION_MAN_CLOSED_SALE_NAME, saleItem);
            forwardKey(request, response, "webshop.jsp.manager.closedsale");
          }
        }else if (actionName.equalsIgnoreCase(SIConfig.SIACTION_REFRESH)){
          saleItem.init(request,urlParam);
          if (saleItem.validateRefresh(request,databaseConnection.getConnection())) {
            try {
              saleItem.executeRefresh(databaseConnection.getConnection());
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException sqle) {}
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.modify"));
              session.setAttribute(SIConfig.SISESSION_MAN_CLOSED_SALE_NAME, saleItem);
              forwardKey(request, response, "webshop.jsp.manager.closedsale");
            } catch (Exception e) {
              try {databaseConnection.getConnection().rollback();} catch (SQLException ee) {}
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.execute.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              session.setAttribute(SIConfig.SISESSION_MAN_CLOSED_SALE_NAME, saleItem);
              forwardKey(request, response, "webshop.jsp.manager.closedsale");
            }
          }else{
            session.setAttribute(SIConfig.SISESSION_MAN_CLOSED_SALE_NAME, saleItem);
            forwardKey(request, response, "webshop.jsp.manager.closedsale");
          }
        }else if (actionName.equalsIgnoreCase(SIConfig.SIACTION_RESET)){
          try {
            saleItem.executeReset(databaseConnection.getConnection());
            try {
              databaseConnection.getConnection().commit();
            } catch (SQLException sqle) {}
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.modify"));
            forwardKey(request, response, "webshop.jsp.manager.closedsale");
          } catch (Exception e) {
            try {databaseConnection.getConnection().rollback();} catch (SQLException ee) {}
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("database.execute.error"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            forwardKey(request, response, "webshop.jsp.manager.closedsale");
          }
        }else if (actionName.equalsIgnoreCase(SIConfig.SIACTION_CLEAR)){
          try {
            saleItem.executeClear(databaseConnection.getConnection());
            try {
              databaseConnection.getConnection().commit();
            } catch (SQLException sqle) {}
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.modify"));
            forwardKey(request, response, "webshop.jsp.manager.closedsale");
          } catch (Exception e) {
            try {databaseConnection.getConnection().rollback();} catch (SQLException ee) {}
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("database.execute.error"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            forwardKey(request, response, "webshop.jsp.manager.closedsale");
          }
        }
      }
    } catch (SQLException e) {
      e.printStackTrace();
      throw new ServletException();
    } catch (NamingException e) {
      e.printStackTrace();
      throw new ServletException();
    } finally {
      databaseConnection.close();
    }
  }
}
