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

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.beans.front.UICmdtyInfo;
import jp.co.sint.beans.front.UICmdtyList;
import jp.co.sint.beans.front.UIFrontNews;
import jp.co.sint.beans.front.UIMain;
import jp.co.sint.beans.mallmgr.UIBGRanking;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.database.SIDatabaseConnection;
import jp.co.sint.servlet.SIServlet;
import jp.co.sint.tools.SIMassiveSendChecker;
import jp.co.sint.tools.SIUtil;
import jp.co.sint.tools.SIURLParameter;
import jp.co.sint.basic.SIUserInfo;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.mail.SIMail;
import jp.co.sint.tools.SICheckUtil;
import jp.co.sint.tools.SIFatalException;

import org.apache.log4j.Category;

/**
 * @version $Id: SIMainSrv.java,v 1.0 2003/10/21 Exp $
 * @author Jinwang Chen <br>
 * Description:
 * <p>
 * History
 * </p>
 * <p>
 * Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reason
 * </p>
 * ============&nbsp;&nbsp;&nbsp;==========&nbsp;&nbsp;===========================<br>
 * jJinwang Chen 2003/10/21 17:45:40 Original
 */
public class SIMainSrv 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 {
    HttpSession session = request.getSession(true);// セッションの取得
    SIDatabaseConnection databaseConnection1 = new SIDatabaseConnection();// DBへのコネクションの作成
    SIURLParameter urlParam = new SIURLParameter(request);// 7.1.1 ST0236 追加
    try {
      String actionName = this.getActionName(urlParam);// 画面からのアクション //7.1.1 ST0236 修正
      String editMode = this.getEditMode(urlParam);// DBへの編集モード //7.1.1 ST0236 修正
      
      UIMain mainID = new UIMain();
      SIUserInfo lUserInfo = SIHTMLUtil.getUserInfo(request);// 7.1.1 ST0219 追加
      
      if (this.getServletPath(request).equals("/used")) {
        forwardKey(request, response, "webshop.jsp.front.used");
      } else if (SIUtil.isNull(actionName) || SIConfig.SIACTION_LIST.equalsIgnoreCase(actionName) || SIConfig.SIACTION_DISPMODE.equalsIgnoreCase(actionName)) {// 一覧と検索などの画面 //7.2.0 ST0301
        // 修正
        // データの取得とデータのチェック
        mainID = new UIMain();
        mainID.setMemberDiscountRate(lUserInfo.getDiscountRate());// 7.1.1 ST0219 追加
        mainID.init(request, urlParam);// 7.1.1 ST0236 修正
        
        if (SIUtil.isNull(mainID.getCmdtyFlagTxt())) {
          mainID.setCmdtyFlagTxt(mainID.getTopCmdtyFlag(databaseConnection1.getConnection()));
        }
        mainID.makeOrderBySQL();
        session.setAttribute(SIConfig.SISESSION_MAIN_LIST_NAME, mainID);
        
        if (this.getServletPath(request).equals("/hair")) {
          forwardKey(request, response, "webshop.jsp.front.hair");
        } else if (this.getServletPath(request).equals("/haircosme")) {
          forwardKey(request, response, "webshop.jsp.front.haircosme");
        } else if (this.getServletPath(request).equals("/esthe")) {
          forwardKey(request, response, "webshop.jsp.front.esthe");
        } else if (this.getServletPath(request).equals("/bed")) {
          forwardKey(request, response, "webshop.jsp.front.bed");
        } else if (this.getServletPath(request).equals("/cosme")) {
          forwardKey(request, response, "webshop.jsp.front.cosme");
        } else if (this.getServletPath(request).equals("/nail")) {
          forwardKey(request, response, "webshop.jsp.front.nail");
        } else if (this.getServletPath(request).equals("/book")) {
          forwardKey(request, response, "webshop.jsp.front.book");
        } else if (this.getServletPath(request).equals("/eyelash")) {
          forwardKey(request, response, "webshop.jsp.front.eyelash");
        } else if (this.getServletPath(request).equals("/advancedsearch")) {
          if (SIUtil.isNull(actionName)) {//詳細検索初期表示
            //mainID.setCmdtySortSel("5");//人気順
            //mainID.setCmdtySortSel("6");//検索一致度順
            mainID.setCmdtySortSel("2");//新着順
            session.setAttribute(SIConfig.SISESSION_MAIN_LIST_NAME, mainID);
          }
          forwardKey(request, response, "webshop.jsp.front.search");
        }else{
          forwardKey(request, response, "webshop.jsp.front.main");
        }
      } else if (SIConfig.SIACTION_CTGRY.equalsIgnoreCase(actionName)) {// カテゴリーツリーやカテゴリータブがクリックされたとき。
        mainID = new UIMain();
        mainID.setMemberDiscountRate(lUserInfo.getDiscountRate());// 7.1.1 ST0219 追加
        mainID.initCtgry(request, urlParam);
        
        // 小物カテゴリ選択時には商品名順、それ以外は新着順を初期表示順にする
        if (mainID.getCtgryCodeTxt().equals("category011")||mainID.getCtgryCodeTxt().equals("category013")||mainID.getCtgryCodeTxt().equals("category014")
          ||mainID.getCtgryCodeTxt().equals("category015")||mainID.getCtgryCodeTxt().equals("category016")||mainID.getCtgryCodeTxt().equals("category018")
          ||mainID.getCtgryCodeTxt().equals("category020")||mainID.getCtgryCodeTxt().startsWith("Z")||mainID.getCtgryCodeTxt().startsWith("V")||mainID.getCtgryCodeTxt().startsWith("N")
          ||mainID.getCtgryCodeTxt().startsWith("T")||mainID.getCtgryCodeTxt().startsWith("L")||mainID.getCtgryCodeTxt().startsWith("W")||mainID.getCtgryCodeTxt().startsWith("H")) {
          mainID.setCmdtySortSel("4");
        } else {
          mainID.setCmdtySortSel("2");
        }
        mainID.makeOrderBySQL();
        session.setAttribute(SIConfig.SISESSION_MAIN_LIST_NAME, mainID);
        if (this.getServletPath(request).equals("/hair")) {
          forwardKey(request, response, "webshop.jsp.front.hair");
        } else if (this.getServletPath(request).equals("/haircosme")) {
          forwardKey(request, response, "webshop.jsp.front.haircosme");
        } else if (this.getServletPath(request).equals("/esthe")) {
          forwardKey(request, response, "webshop.jsp.front.esthe");
        } else if (this.getServletPath(request).equals("/bed")) {
          forwardKey(request, response, "webshop.jsp.front.bed");
        } else if (this.getServletPath(request).equals("/cosme")) {
          forwardKey(request, response, "webshop.jsp.front.cosme");
        } else if (this.getServletPath(request).equals("/nail")) {
          forwardKey(request, response, "webshop.jsp.front.nail");
        } else if (this.getServletPath(request).equals("/book")) {
          forwardKey(request, response, "webshop.jsp.front.book");
        } else if (this.getServletPath(request).equals("/eyelash")) {
          forwardKey(request, response, "webshop.jsp.front.eyelash");
        } else if (this.getServletPath(request).equals("/advancedsearch")) {
          forwardKey(request, response, "webshop.jsp.front.search");
        }else{
          forwardKey(request, response, "webshop.jsp.front.main");
        }
      } else if (SIConfig.SIACTION_SEARCH.equalsIgnoreCase(actionName)) {
        mainID = new UIMain();
        mainID.setMemberDiscountRate(lUserInfo.getDiscountRate());
        mainID.initSrch(request, urlParam);
        mainID.makeOrderBySQL();
        mainID.setEditModeTxt(SIConfig.SIEDIT_MODE_SEARCH);
        session.setAttribute(SIConfig.SISESSION_MAIN_LIST_NAME, mainID);
        if (this.getServletPath(request).equals("/hair")) {
          forwardKey(request, response, "webshop.jsp.front.hair");
        } else if (this.getServletPath(request).equals("/haircosme")) {
          forwardKey(request, response, "webshop.jsp.front.haircosme");
        } else if (this.getServletPath(request).equals("/esthe")) {
          forwardKey(request, response, "webshop.jsp.front.esthe");
        } else if (this.getServletPath(request).equals("/bed")) {
          forwardKey(request, response, "webshop.jsp.front.bed");
        } else if (this.getServletPath(request).equals("/cosme")) {
          forwardKey(request, response, "webshop.jsp.front.cosme");
        } else if (this.getServletPath(request).equals("/nail")) {
          forwardKey(request, response, "webshop.jsp.front.nail");
        } else if (this.getServletPath(request).equals("/book")) {
          forwardKey(request, response, "webshop.jsp.front.book");
        } else if (this.getServletPath(request).equals("/eyelash")) {
          forwardKey(request, response, "webshop.jsp.front.eyelash");
        } else if (this.getServletPath(request).equals("/advancedsearch")) {
          forwardKey(request, response, "webshop.jsp.front.search");
        }else{
          forwardKey(request, response, "webshop.jsp.front.main");
        }
      } else if (SIConfig.SIACTION_CART.equalsIgnoreCase(actionName)) {
        mainID = (UIMain) session.getAttribute(SIConfig.SISESSION_MAIN_LIST_NAME);
        if(mainID==null) mainID = new UIMain();
        mainID.setMemberDiscountRate(lUserInfo.getDiscountRate());// 7.1.1 ST0219 追加
        mainID.initCart(urlParam);// 7.1.1 ST0236 修正
        mainID.addCart(request, databaseConnection1.getConnection());
        if(SIUtil.isNull(mainID.getDispModeTxt())) mainID.setDispModeTxt(SIConfig.DEFAULT_DISPMODE);
        session.setAttribute(SIConfig.SISESSION_MAIN_LIST_NAME, mainID);
        if (this.getServletPath(request).equals("/hair")) {
          forwardKey(request, response, "webshop.jsp.front.hair");
        } else if (this.getServletPath(request).equals("/haircosme")) {
          forwardKey(request, response, "webshop.jsp.front.haircosme");
        } else if (this.getServletPath(request).equals("/esthe")) {
          forwardKey(request, response, "webshop.jsp.front.esthe");
        } else if (this.getServletPath(request).equals("/bed")) {
          forwardKey(request, response, "webshop.jsp.front.bed");
        } else if (this.getServletPath(request).equals("/cosme")) {
          forwardKey(request, response, "webshop.jsp.front.cosme");
        } else if (this.getServletPath(request).equals("/nail")) {
          forwardKey(request, response, "webshop.jsp.front.nail");
        } else if (this.getServletPath(request).equals("/book")) {
          forwardKey(request, response, "webshop.jsp.front.book");
        } else if (this.getServletPath(request).equals("/eyelash")) {
          forwardKey(request, response, "webshop.jsp.front.eyelash");
        } else if (this.getServletPath(request).equals("/advancedsearch")) {
          forwardKey(request, response, "webshop.jsp.front.search");
        }else{
          forwardKey(request, response, "webshop.jsp.front.main");
        }
      } else if (SIConfig.SIACTION_ADD.equalsIgnoreCase(actionName)) {//マイカタログ追加
        mainID = (UIMain) session.getAttribute(SIConfig.SISESSION_MAIN_LIST_NAME);
        if(mainID==null) mainID = new UIMain();
        mainID.initCart(urlParam);
        if(SIUtil.isNull(mainID.getDispModeTxt())) mainID.setDispModeTxt(SIConfig.DEFAULT_DISPMODE);
        try {
          String custCode = SIHTMLUtil.getUserInfo(request).getCustCode();
          StringBuffer lSql = new StringBuffer();
          lSql.append("INSERT INTO mycatalogtbl ");
          lSql.append("SELECT ").append(custCode);
          lSql.append(",").append(SIDBUtil.SQL2Str(mainID.getCartIndividualCodeTxt()));
          lSql.append(",coalesce(max(disporder),0)+1 ");
          lSql.append("FROM mycatalogtbl WHERE custcode=").append(SIDBUtil.SQL2Str(custCode));
          
          SIDBUtil.execSQL(databaseConnection1.getConnection(), lSql.toString());
          try {databaseConnection1.getConnection().commit();} catch (SQLException ee) {}
        } catch (Exception e) {
          try {databaseConnection1.getConnection().rollback();} catch (SQLException ee) {}
          e.printStackTrace();
        }
        session.setAttribute(SIConfig.SISESSION_MAIN_LIST_NAME, mainID);
        if (this.getServletPath(request).equals("/hair")) {
          forwardKey(request, response, "webshop.jsp.front.hair");
        } else if (this.getServletPath(request).equals("/haircosme")) {
          forwardKey(request, response, "webshop.jsp.front.haircosme");
        } else if (this.getServletPath(request).equals("/esthe")) {
          forwardKey(request, response, "webshop.jsp.front.esthe");
        } else if (this.getServletPath(request).equals("/bed")) {
          forwardKey(request, response, "webshop.jsp.front.bed");
        } else if (this.getServletPath(request).equals("/cosme")) {
          forwardKey(request, response, "webshop.jsp.front.cosme");
        } else if (this.getServletPath(request).equals("/nail")) {
          forwardKey(request, response, "webshop.jsp.front.nail");
        } else if (this.getServletPath(request).equals("/book")) {
          forwardKey(request, response, "webshop.jsp.front.book");
        } else if (this.getServletPath(request).equals("/eyelash")) {
          forwardKey(request, response, "webshop.jsp.front.eyelash");
        } else if (this.getServletPath(request).equals("/advancedsearch")) {
          forwardKey(request, response, "webshop.jsp.front.search");
        }else{
          forwardKey(request, response, "webshop.jsp.front.main");
        }
      } else if (SIConfig.SIACTION_RANKING.equalsIgnoreCase(actionName)) {
        UIBGRanking regRanking = new UIBGRanking();
        regRanking.initR(urlParam);
        session.setAttribute(SIConfig.SISESSION_RANKING_LIST_NAME, regRanking);
        forwardKey(request, response, "webshop.jsp.front.bgranking");
      } else if (SIConfig.SIACTION_USEDNEW.equalsIgnoreCase(actionName)) {
        UICmdtyList regList = new UICmdtyList();
        regList.init(urlParam);
        session.setAttribute(SIConfig.SISESSION_USEDNEW_LIST_NAME, regList);
        forwardKey(request, response, "webshop.jsp.front.usednew");
      } else if (SIConfig.SIACTION_RECOMMEND.equalsIgnoreCase(actionName)) {
        UICmdtyList regList = new UICmdtyList();
        regList.init(urlParam);
        session.setAttribute(SIConfig.SISESSION_RECOMMEND_LIST_NAME, regList);
        forwardKey(request, response, "webshop.jsp.front.recommend");
      } else if (SIConfig.SIACTION_NEWS.equalsIgnoreCase(actionName)) {
        UIFrontNews regList = new UIFrontNews();
        regList.init(urlParam);
        session.setAttribute(SIConfig.SISESSION_NEWS_LIST_NAME, regList);
        forwardKey(request, response, "webshop.jsp.front.news");
      } else if (SIConfig.SIACTION_BACK.equalsIgnoreCase(actionName)) {
        String rank = (String) urlParam.getParam("rank");
        if (rank != null) {
          forwardKey(request, response, "webshop.jsp.front.bgranking");
        } else {
          mainID = (UIMain) session.getAttribute(SIConfig.SISESSION_MAIN_LIST_NAME);
          if (this.getServletPath(request).equals("/hair")) {
            forwardKey(request, response, "webshop.jsp.front.hair");
          } else if (this.getServletPath(request).equals("/haircosme")) {
            forwardKey(request, response, "webshop.jsp.front.haircosme");
          } else if (this.getServletPath(request).equals("/esthe")) {
            forwardKey(request, response, "webshop.jsp.front.esthe");
          } else if (this.getServletPath(request).equals("/bed")) {
            forwardKey(request, response, "webshop.jsp.front.bed");
          } else if (this.getServletPath(request).equals("/cosme")) {
            forwardKey(request, response, "webshop.jsp.front.cosme");
          } else if (this.getServletPath(request).equals("/nail")) {
            forwardKey(request, response, "webshop.jsp.front.nail");
          } else if (this.getServletPath(request).equals("/book")) {
            forwardKey(request, response, "webshop.jsp.front.book");
          } else if (this.getServletPath(request).equals("/eyelash")) {
            forwardKey(request, response, "webshop.jsp.front.eyelash");
          } else if (this.getServletPath(request).equals("/advancedsearch")) {
            forwardKey(request, response, "webshop.jsp.front.search");
          }else{
            forwardKey(request, response, "webshop.jsp.front.main");
          }
        }
      } else if (SIConfig.SIACTION_MAIL.equalsIgnoreCase(actionName)) {
        StringBuffer lMailBuf = new StringBuffer("");
        String toMailAddress = this.getParameter(urlParam, "toAddress") + this.getParameter(urlParam, "emailDomainTxt");
        if (SIUtil.isNotNull(toMailAddress) && SICheckUtil.isMail(toMailAddress)) {
          // 大量送信チェック
          if (SIMassiveSendChecker.check(toMailAddress)) {
            try {
              lMailBuf.append("http://www.beautygarage.jp\n");
              lMailBuf.append("ビューティガレージより、「BGモバイル」携帯サイトのURLが送信されました。\n");
              lMailBuf.append("ご利用ありがとうございます。ごゆっくりと、お買い物をお楽しみ下さい。");
              SIMail lMail = new SIMail();
              lMail.setFrom(SIConfig.SIMALL.getEmail());
              lMail.addTo(toMailAddress);
              lMail.setSubject("BEAUTYGARAGEよりご案内");
              lMail.setContent(lMailBuf.toString());
              if (lMail.sendMail()) log.debug("<" + toMailAddress + "> 宛先に送信OK! メール種類=携帯告知メール");
              else log.debug("<" + toMailAddress + "> 宛先に送信NG! メール種類=携帯告知メール");
            } catch (SIFatalException e) {
              e.printStackTrace();
            }
          }
        }
        mainID = (UIMain) session.getAttribute(SIConfig.SISESSION_MAIN_LIST_NAME);
        if (this.getServletPath(request).equals("/hair")) {
          forwardKey(request, response, "webshop.jsp.front.hair");
        } else if (this.getServletPath(request).equals("/haircosme")) {
          forwardKey(request, response, "webshop.jsp.front.haircosme");
        } else if (this.getServletPath(request).equals("/esthe")) {
          forwardKey(request, response, "webshop.jsp.front.esthe");
        } else if (this.getServletPath(request).equals("/bed")) {
          forwardKey(request, response, "webshop.jsp.front.bed");
        } else if (this.getServletPath(request).equals("/cosme")) {
          forwardKey(request, response, "webshop.jsp.front.cosme");
        } else if (this.getServletPath(request).equals("/nail")) {
          forwardKey(request, response, "webshop.jsp.front.nail");
        } else if (this.getServletPath(request).equals("/book")) {
          forwardKey(request, response, "webshop.jsp.front.book");
        } else if (this.getServletPath(request).equals("/eyelash")) {
          forwardKey(request, response, "webshop.jsp.front.eyelash");
        } else if (this.getServletPath(request).equals("/advancedsearch")) {
          forwardKey(request, response, "webshop.jsp.front.search");
        }else{
          forwardKey(request, response, "webshop.jsp.front.main");
        }
      } else {}
    } catch (SQLException e) {
      e.printStackTrace();
      throw new ServletException();
    } catch (NamingException e) {
      e.printStackTrace();
      throw new ServletException();
    } finally {
      databaseConnection1.close();
    }
  }
}