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

import java.sql.Connection;

import javax.servlet.http.HttpServletRequest;

import jp.co.sint.basic.SIFrontBasic;
import jp.co.sint.basic.SIUserInfo;
import jp.co.sint.beans.mallmgr.UIRegCust;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckUtil;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIURLMap;
import jp.co.sint.tools.SIUtil;
import jp.co.sint.tools.SIURLParameter;//7.1.1 ST0236 追加

import org.apache.log4j.Category;

/**
 * @version $Id: UIIUserEdit.java,v 1.0 2004/01/06 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>
 * Jinwang Chen   2004/01/06 10:24:58  Original
 */
public class UIIUserEdit extends SIFrontBasic {
  //ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  private UIRegCust regCust=new UIRegCust();
  
  private String nextUrlTxt="";
  
  private String ssouserId="";
  
  //画面ID
  private String scrID="";
  
  public UIIUserEdit(){}
  
  public void setEditModeTxt(String lEditModeTxt){
    this.editModeTxt =lEditModeTxt;
    regCust.setEditModeTxt(lEditModeTxt);
  }
  
  public void setRegCust(UIRegCust lRegCust){
    if (lRegCust==null)lRegCust=new UIRegCust();
    regCust=lRegCust;
  }
  
  public void setRegCust(String lCustCode){
    regCust.setCustCode(lCustCode);
  }
  
  public void setNextUrlTxt(String lNextUrlTxt){
    if (SIUtil.isNull(lNextUrlTxt)) lNextUrlTxt="";
    this.nextUrlTxt=SIUtil.changeTo(lNextUrlTxt.trim(),this.encode);
  }
  
  public void setSsouserId(String ssouserId){
  if (SIUtil.isNull(ssouserId)) ssouserId="";
    this.ssouserId=SIUtil.changeTo(ssouserId.trim(),this.encode);
  }
  
  public void setScrID(String lScrID){
    if (SIUtil.isNull(lScrID)) lScrID="";
    this.scrID=SIUtil.changeTo(lScrID.trim(),this.encode);
  }
  
  public String getNextUrlTxt(){
    return this.nextUrlTxt;
  }
  
  public String getSsouserId(){
    return this.ssouserId;
  }
  
  public String getScrID(){
    return this.scrID;
  }
  
  public void reset(Connection lConnection){
    regCust.reset(lConnection);
  }
  
  public UIRegCust getRegCust(){
    return regCust;
  }
  
  //7.1.1 ST0236 修正 ここから
  public void init(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    setScrID((String)lUrlParam.getParam("scrID"));
    if (SIUtil.isNull(getScrID()))init1(lRequest,lUrlParam);
    else init2(lRequest,lUrlParam);
  }
  //7.1.1 ST0236 修正 ここまで
  
  //7.1.1 ST0236 修正 ここから
  private void init1(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    super.init(lRequest,lUrlParam);
    SIUserInfo lUserInfo=SIHTMLUtil.getUserInfo(lRequest);
    
    regCust.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    if (lUserInfo.isLogin(lRequest)){
      regCust.setCustCode(lUserInfo.getCustCode());
    }
    regCust.setCustName((String)lUrlParam.getParam("custName"));
    regCust.setCustCompanyFlg((String)lUrlParam.getParam("custCompanyFlg"));
    regCust.setCustPronName((String)lUrlParam.getParam("custPronName"));
    regCust.setBirthDateYear((String)lUrlParam.getParam("birthDateYear"));
    regCust.setBirthDateMonth((String)lUrlParam.getParam("birthDateMonth"));
    
    regCust.setBirthDateDay((String)lUrlParam.getParam("birthDateDay"));
    regCust.setSex((String)lUrlParam.getParam("sex"));
    regCust.setEmail((String)lUrlParam.getParam("email"));
    
    regCust.setPassword((String)lUrlParam.getParam("password"));
    regCust.setPasswordCon((String)lUrlParam.getParam("passwordCon"));
    regCust.setNewMailFlg((String)lUrlParam.getParam("newMailFlg"));
    
    regCust.setMemberLevelCode((String)lUrlParam.getParam("memberLevelCode"));
    regCust.setPWQuestion((String)lUrlParam.getParam("pWQuestion"));
    regCust.setPWAnswer((String)lUrlParam.getParam("pWAnswer"));
    regCust.setRegistRoute((String)lUrlParam.getParam("registRoute"));
    if (SIUtil.isNull((String)lUrlParam.getParam("registRoute"))&&SIURLMap.isSmartPhone(lRequest)) {
      regCust.setRegistRoute("8");
    } else if (SIUtil.isNull((String)lUrlParam.getParam("registRoute"))) {
      regCust.setRegistRoute("6");
    }
    
    this.setNextUrlTxt((String)lUrlParam.getParam("nid"));
  }
  //7.1.1 ST0236 修正 ここまで
  
  //7.1.1 ST0236 修正 ここから
  private void init2(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    regCust.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    regCust.setPayMethodCode((String)lUrlParam.getParam("payMethodCode"));
    regCust.setPostCode1((String)lUrlParam.getParam("postCode1"));
    regCust.setPostCode2((String)lUrlParam.getParam("postCode2"));
    regCust.setAddress1((String)lUrlParam.getParam("address1"));
    regCust.setAddress2((String)lUrlParam.getParam("address2"));
    regCust.setAddress3((String)lUrlParam.getParam("address3"));
    regCust.setStoreTel((String)lUrlParam.getParam("storeTel"));
    regCust.setFax((String)lUrlParam.getParam("fax"));
    regCust.setCompanyName((String)lUrlParam.getParam("companyName"));
    regCust.setCorporationName((String)lUrlParam.getParam("corporationName"));
    regCust.setJob((String)lUrlParam.getParam("job"));
    regCust.setHowToKnow((String)lUrlParam.getParam("howToKnow"));
    regCust.setHobby(lRequest.getParameterValues("hobby"));
    regCust.setSalonUrl((String)lUrlParam.getParam("salonUrl"));
    regCust.setCatalogRequest((String) lUrlParam.getParam("catalogRequest"));
    String catalogRequest = "0";
    if (SIUtil.isNotNull((String) lUrlParam.getParam("catalogType1")) && SICheckUtil.isDigit((String) lUrlParam.getParam("catalogType1"))) {
      catalogRequest = SIUtil.add(catalogRequest, (String) lUrlParam.getParam("catalogType1"));
    }
    if (SIUtil.isNotNull((String) lUrlParam.getParam("catalogType2")) && SICheckUtil.isDigit((String) lUrlParam.getParam("catalogType2"))) {
      catalogRequest = SIUtil.add(catalogRequest, (String) lUrlParam.getParam("catalogType2"));
    }
    if (!"0".equals(catalogRequest)) regCust.setCatalogRequest(catalogRequest);
  }
  //7.1.1 ST0236 修正 ここまで
  
  public boolean validate(HttpServletRequest lRequest, Connection lConnection){
    if (SIUtil.isNull(getScrID()))return validate1(lRequest,lConnection);
    else return validate2(lRequest,lConnection);
  }
  
  private boolean validate1(HttpServletRequest lRequest, Connection lConnection){
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    StringBuffer lSqlBuf=new StringBuffer();
    
    SICheckValid.checkValid(errors, "お客様名", regCust.getCustName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "お客様名", regCust.getCustName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 40);//7.2.0 ST0670 修正
    
    SICheckValid.checkValid(errors, "お客様名カナ", regCust.getCustPronName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_ZENKAKU_KANA_TYPE);
    SICheckValid.checkValid(errors, "お客様名カナ", regCust.getCustPronName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    
    SICheckValid.checkValid(errors, "メールアドレス", regCust.getEmail(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_MAIL_TYPE);
    SICheckValid.checkValid(errors, "メールアドレス", regCust.getEmail(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    
    SICheckValid.checkValid(errors, "パスワード", regCust.getPassword(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "パスワード", regCust.getPassword(), SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "パスワード", regCust.getPassword(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_TYPE, SIConfig.SIMinimumPassword, 16);
    
    //重複顧客コードまたはメールの存在でかどうかをチェックします
    if (SIConfig.SIEDIT_MODE_INSERT.equalsIgnoreCase(this.getEditModeTxt().trim())) {//新規の場合には
      lSqlBuf.append("SELECT custcode FROM CustTbl WHERE Email=").append(SIDBUtil.SQL2Str(regCust.getEmail()));
      SICheckValid.checkDuplicate(errors,lConnection, "メールアドレス",lSqlBuf.toString());
    }else{//修正の場合には
      lSqlBuf.append("SELECT custcode FROM CustTbl WHERE custcode<>").append(SIDBUtil.SQL2Str(regCust.getCustCode()," "));
      lSqlBuf.append("AND Email=").append(SIDBUtil.SQL2Str(regCust.getEmail()));
      SICheckValid.checkDuplicate(errors, lConnection, "メールアドレス", lSqlBuf.toString());
    }

    // add by mikami
    if (errors.isEmpty() && this.getSsouserId() == ""){
      regCust.validateAccount2(lRequest,lConnection);
      errors=(SICustomErrors)lRequest.getAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      if (errors==null)errors=new SICustomErrors();
    }
    // add end

    SICheckValid.checkValid(errors, "パスワードリマインダ質問", regCust.getPWQuestion(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    if (SIUtil.isNotNull(regCust.getPWQuestion())){
      SICheckValid.checkValid(errors, "パスワードリマインダ回答", regCust.getPWAnswer(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    }
    SICheckValid.checkValid(errors, "パスワードリマインダ回答", regCust.getPWAnswer(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    
    if (!errors.isEmpty())lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
    else lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    return errors.isEmpty();
  }
  
  private boolean validate2(HttpServletRequest lRequest, Connection lConnection){
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    StringBuffer lSqlBuf=new StringBuffer();
    
//  if (SIConfig.SIRUNNING_MODE_CURRENT==SIConfig.SIRUNNING_MODE_TOGETHER){
//    SICheckValid.checkValid(errors, "支払方法", regCust.getPayMethodCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
//  }
    
    //7.1.1 ST0162 修正 ここから
    SICheckValid.checkValid(errors, "郵便番号(上3桁)", regCust.getPostCode1(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "郵便番号(下4桁)", regCust.getPostCode2(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    if (regCust.getPostCode1().toString().trim().length() != 3||regCust.getPostCode2().toString().trim().length() != 4) {errors.addError(new SICustomError("manager.app.postcode.form"));}
    
    SICheckValid.checkValid(errors, "住所1(都道府県)", regCust.getAddress1(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "住所1(都道府県)", regCust.getAddress1(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE,8);
    if (SIUtil.isNotNull(regCust.getAddress1())){
      lSqlBuf.append("SELECT PrefectureName FROM PrefectureMTbl WHERE PrefectureName=");
      lSqlBuf.append(SIDBUtil.SQL2Str(regCust.getAddress1()));
      SICheckValid.checkExist(errors,lConnection, "住所1(都道府県)",lSqlBuf.toString());
    }
    
    SICheckValid.checkValid(errors, "住所2(市区町村・番地)", regCust.getAddress2(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "住所2(市区町村・番地)", regCust.getAddress2(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    
    SICheckValid.checkValid(errors, "住所3(ビル名・階など)", regCust.getAddress3(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    //7.1.1 ST0162 修正 ここまで
    
    SICheckValid.checkValid(errors, "電話番号", regCust.getStoreTel(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "電話番号", regCust.getStoreTel(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_TYPE,9,16);
    SICheckValid.checkValid(errors, "FAX番号", regCust.getFax(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "FAX番号", regCust.getFax(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_TYPE,9,16);
    SICheckValid.checkValid(errors, "サロン名", regCust.getCompanyName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    SICheckValid.checkValid(errors, "会社名", regCust.getCorporationName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    
    // 顧客属性0（職業）
    SICheckValid.checkValid(errors, SIConfig.SIMALL.getCustAttribute0(), regCust.getJob(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, SIConfig.SIMALL.getCustAttribute0(), regCust.getJob(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    
    boolean otherMenuFlg = false;
    // 顧客属性2（施術メニュー）
    for (int i = 0; i < regCust.getHobby().length; i++) {
      SICheckValid.checkValid(errors, SIConfig.SIMALL.getCustAttribute2(), regCust.getHobby()[i], SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
      if (regCust.getHobby()[i].equals("その他")) {
        SICheckValid.checkValid(errors, "その他メニューの内容", regCust.getOtherMenu(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
        otherMenuFlg = true;
      }
    }
    if (!otherMenuFlg) regCust.setOtherMenu(""); // その他未選択時はメニュー内訳を消去
    
    // 顧客属性1（従業員数）
    SICheckValid.checkValid(errors, SIConfig.SIMALL.getCustAttribute1(), regCust.getHowToKnow(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    
    SICheckValid.checkValid(errors, "サロンホームページURL", regCust.getSalonUrl(), SICheckDataConf.SICHECK_DATA_URL_TYPE);
    
    if (!errors.isEmpty())lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
    else lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    return errors.isEmpty();
  }
}
