/**
 * Copyright (c) 2003-2005 System Integrator Corporation.
 *                 All Rights Reserved.
 */
package jp.co.sint.servlet.mallmgr;

import java.io.IOException;
import java.sql.Connection;

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

import jp.co.sint.basic.SICmdtyComposition;
import jp.co.sint.basic.SILogin;
import jp.co.sint.beans.mallmgr.UICmdtyCompositionopt;
import jp.co.sint.beans.mallmgr.UIRegCmdty;
import jp.co.sint.beans.mallmgr.UIRegCmdtyComposition;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDatabaseConnection;
import jp.co.sint.servlet.SIServlet;
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.commons.lang.StringUtils;
import org.apache.log4j.Category;

/**
 * @version $Id: SICmdtyCompositionoptSrv.java,v 1.0 Exp $
 * @author paku
 * @Description: 構成品選択を行うServlet
 * @History
 * Author          Date        Reason
 * ==============  ==========  ===========================
 * paku            2012/12/04  Original
 */
public class SICmdtyCompositionoptSrv extends SIServlet {

  private static final long serialVersionUID = 1L;

  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);

  /**
   * <b>doUpdate </b> HTTP リクエストの処理
   *
   * @param request
   * @param response
   * @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(); // DBへのコネクションの作成
    SIURLParameter urlParam = new SIURLParameter(request);

    try {
      Connection conn = databaseConnection.getConnection();
      String actionName = this.getActionName(urlParam); // 画面からのアクション
      String shopCode = (String) urlParam.getParam("shopCode");
      String cmdtyCode = (String) urlParam.getParam("cmdtyCode");
      String individualCode = (String) urlParam.getParam("individualCode");
      String callId = (String) urlParam.getParam("callId");
      String cmdtyCompositionFlg = (String) urlParam.getParam("flg");

      // フリー見積商品選択
      if (SIConfig.SICALL_ID_FREE_ESTIMATE.equals(callId) || SIConfig.SICALL_ID_ORDER.equals(callId) || SIConfig.SICALL_ID_ORDER_DETAIL.equals(callId) || SIConfig.SICALL_ID_KEEP.equals(callId)) {
        // 確定
        if (SIConfig.SIACTION_NEXT.equals(actionName)) {

          UIRegCmdtyComposition regCmdtyComposition = (UIRegCmdtyComposition) session.getAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_COMPOSITION);
          if (regCmdtyComposition == null) {
            regCmdtyComposition = new UIRegCmdtyComposition(request, urlParam);
            regCmdtyComposition.defaultSet();
            regCmdtyComposition.setShopCode(shopCode);
            regCmdtyComposition.setCmdtyCode(cmdtyCode);
            regCmdtyComposition.setCollId(callId);
            regCmdtyComposition.setIndividualCode(individualCode);
            session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_COMPOSITION, regCmdtyComposition);
          }

          UICmdtyCompositionopt cmdtyCompositionopt = new UICmdtyCompositionopt();
          String setDiscountStr = regCmdtyComposition.getSetDiscount();
          if (SIUtil.isNotNull(setDiscountStr) && StringUtils.isNumeric(setDiscountStr)) {
            cmdtyCompositionopt.setSetDiscount(setDiscountStr);
          }
          cmdtyCompositionopt.setGroupColl(regCmdtyComposition.getCompositionGroupList());
          cmdtyCompositionopt.setAppendedColl(regCmdtyComposition.getCompositionAppendedList());
          cmdtyCompositionopt.setOptionColl(regCmdtyComposition.getCompositionOptionList());
          cmdtyCompositionopt.setSectionCount(regCmdtyComposition.getSectionCount());
          cmdtyCompositionopt.init(request, urlParam, conn);
          if (SIConfig.SICALL_ID_FREE_ESTIMATE.equals(callId)) {
            cmdtyCompositionopt.setNoCheckStock(true);
          }
          if (cmdtyCompositionopt.validate(request, conn)){
            // セット値引き
            int setDiscount = 0;
            if (SIUtil.isNotNull(setDiscountStr) && StringUtils.isNumeric(setDiscountStr)) {
              setDiscount += Integer.parseInt(setDiscountStr) * cmdtyCompositionopt.getAmount();
            }
            String setDiscountStrAll = (String) session.getAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_SET_DISCOUNT);
            if (SIUtil.isNotNull(setDiscountStrAll) && StringUtils.isNumeric(setDiscountStrAll)) {
              setDiscount += Integer.parseInt(setDiscountStrAll);
            }
            session.setAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_SET_DISCOUNT, String.valueOf(setDiscount));
            session.setAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_DATA, getCmdtyComposition(regCmdtyComposition, cmdtyCompositionopt));
            if (cmdtyCompositionopt.getCompositionGroupList() != null)
              session.setAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_GROUP_LIST, cmdtyCompositionopt.getCompositionGroupList());
            if (cmdtyCompositionopt.getCompositionAppendedList() != null)
              session.setAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_APPENDED_LIST, cmdtyCompositionopt.getCompositionAppendedList());
            if (cmdtyCompositionopt.getCompositionOptionList() != null)
              session.setAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_OPTION_LIST, cmdtyCompositionopt.getCompositionOptionList());
            session.setAttribute(SIConfig.SISESSION_MAN_FLAG_POPUP_CLOSE, "true");
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.insert"));
            forwardKey(request, response, "webshop.jsp.manager.cmdty.compositionopt");
          } else {
            session.setAttribute(SIConfig.SISESSION_MAN_FLAG_POPUP_CLOSE, "false");
            forwardKey(request, response, "webshop.jsp.manager.cmdty.compositionopt");
          }
        } else {

          UIRegCmdtyComposition regCmdtyComposition = new UIRegCmdtyComposition(request, urlParam);
          regCmdtyComposition.defaultSet();
          regCmdtyComposition.setShopCode(shopCode);
          regCmdtyComposition.setCmdtyCode(cmdtyCode);
          regCmdtyComposition.setIndividualCode(individualCode);
          regCmdtyComposition.setCollId(callId);
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_COMPOSITION, regCmdtyComposition);
          UIRegCmdty regCmdty = new UIRegCmdty(request, urlParam);
          regCmdty.init(request, urlParam);
          regCmdty.setShopCode(shopCode);
          regCmdty.setCmdtyCode(cmdtyCode);
          regCmdty.setIndividualCode(individualCode);
          regCmdty.setEditModeTxt(SIConfig.SIEDIT_MODE_SEARCH);
          regCmdty.setCmdtyCompositionFlg(cmdtyCompositionFlg);
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_NAME, regCmdty);
          session.removeAttribute(SIConfig.SISESSION_MAN_FLAG_POPUP_CLOSE);
          session.removeAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_DATA);
          session.removeAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_GROUP_LIST);
          session.removeAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_APPENDED_LIST);
          session.removeAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_OPTION_LIST);
          session.removeAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_SET_DISCOUNT);
          forwardKey(request, response, "webshop.jsp.manager.cmdty.compositionopt");
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
      throw new ServletException();
    } finally {
      databaseConnection.close();
    }
  }

  private SICmdtyComposition getCmdtyComposition(UIRegCmdtyComposition regCompostion, UICmdtyCompositionopt regCompostionopt){
    SICmdtyComposition resComposition = new SICmdtyComposition();

    resComposition.setShopCode(regCompostion.getShopCode());
    resComposition.setCmdtyCode(regCompostion.getCmdtyCode());
    resComposition.setIndividualCode(regCompostion.getIndividualCode());
    resComposition.setAmount(String.valueOf(regCompostionopt.getAmount()));
    resComposition.setSetDiscount(regCompostionopt.getSetDiscount());
    resComposition.setSetCmdtyName(regCompostion.getCmdtyName());
    resComposition.setPageNumberTxt(regCompostionopt.getPageNumberTxt());
    resComposition.setPageSizeSel(regCompostionopt.getPageSizeSel());

    return resComposition;
  }
}
