package jp.co.sint.beans.mallmgr;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.servlet.http.HttpServletRequest;

import jp.co.sint.basic.SIWanted;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIUtil;
import jp.co.sint.tools.SIURLParameter;

import org.apache.log4j.Category;

public class UIRegWanted extends SIWanted {
  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  // 登録ユーザ支店コード
  private String userBranchCode = "";
  
  // 登録ユーザ支店名
  private String userBranchName = "";
  
  // 一時保存画像名
  private String tempImageName = "";
  
  // 画像ファイルアドレス
  private String imageFileAddress = "";
  
  /**
   * UIRegColor コンストラクタ
   * 
   * @param なし
   * @return なし
   * @throws なし
   */
  public UIRegWanted() {
  }
  
  public UIRegWanted(HttpServletRequest lRequest,Connection lConnection) {
    this.setKeyCode(lRequest.getParameter("keyCode"));
    this.setKeyBranch(lRequest.getParameter("keyBranch"));
    String userCode = SIHTMLUtil.getLogin(lRequest).getUserCode();
    
    try{
      this.setUserBranchCode(SIDBUtil.getFirstData(lConnection, "SELECT belongingbranchcode FROM chargetbl WHERE chargecode="+SIDBUtil.SQL2Str(userCode)));
      this.setUserBranchName(SIDBUtil.getFirstData(lConnection, "SELECT branchname FROM branchtbl WHERE branchcode="+SIDBUtil.SQL2Str(this.getUserBranchCode())));
    }catch (Exception e){
      e.printStackTrace();
    }
  }
  
  public String getUserBranchCode() {
    return userBranchCode;
  }
  
  public String getUserBranchName() {
    return userBranchName;
  }
  
  public String getTempImageName() {
    return tempImageName;
  }
  
  public String getImageFileAddress() {
    return imageFileAddress;
  }
  
  public void setUserBranchCode(String userBranchCode) {
    if (SIUtil.isNull(userBranchCode)) userBranchCode = "";
    this.userBranchCode = userBranchCode;
  }
  
  public void setUserBranchName(String userBranchName) {
    if (SIUtil.isNull(userBranchName)) userBranchName = "";
    this.userBranchName = userBranchName;
  }
  
  public void setTempImageName(String tempImageName) {
    if (SIUtil.isNull(tempImageName)) tempImageName = "";
    this.tempImageName = tempImageName;
  }
  
  public void setImageFileAddress(String imageFileAddress) {
    if (SIUtil.isNull(imageFileAddress)) imageFileAddress = "";
    this.imageFileAddress = imageFileAddress;
  }
  
  /**
   * <b>init</b> 入力した新規レコードのデータを取得します。
   * 
   * @param request クライアントからリクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public void init(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    super.init(lRequest, lUrlParam);
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    this.setKeyCode((String)lUrlParam.getParam("keyCode"));
    this.setKeyBranch((String)lUrlParam.getParam("keyBranch"));
    this.setEnableFlg((String)lUrlParam.getParam("enableFlg"));
    this.setCmdtyName((String)lUrlParam.getParam("cmdtyName"));
    this.setDispValue((String)lUrlParam.getParam("dispValue"));
    this.setMemo((String)lUrlParam.getParam("memo"));
    this.setBranchCode((String)lUrlParam.getParam("branchCode"));
    if(SIUtil.isNull(this.getBranchCode())){
      this.setBranchName("本部");
    }else{
      this.setBranchName((String)lUrlParam.getParam("branchName"));
    }
    this.setInitUser(SIHTMLUtil.getLogin(lRequest).getUserCode());
    this.setUpdateUser(SIHTMLUtil.getLogin(lRequest).getUserCode());
    this.setInitDateTime((String)lUrlParam.getParam("initDateTime"));
    this.setUpdateDateTime((String)lUrlParam.getParam("updateDateTime"));
    this.setDeleteFlg((String)lUrlParam.getParam("deleteFlg"));
    this.setTempImageName((String)lUrlParam.getParam("tempImageName"));
    this.setImageFileAddress((String)lUrlParam.getParam("imageFileAddress"));
  }
  
  public void initImage(SIURLParameter urlParam,String lImageFileName){
    this.setTempImageName(lImageFileName);
    if(SIUtil.isNotNull(lImageFileName)){
      this.setImageFileAddress((String)urlParam.getParam("filedata"));
    }
  }
  
  /**
   * <b>validateInsert</b 入力した新規レコードのデータをチェックします。
   * 
   * @param lRequest クライアントからのリクエスト
   * @return なし
   * @throws なし
   */
  
  public boolean validateInsert(HttpServletRequest lRequest, Connection lConnection) {
    SICustomErrors errors = new SICustomErrors();
    
    // 商品名
    SICheckValid.checkValid(errors, "商品名", getCmdtyName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "商品名", getCmdtyName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    
    // 査定内容
    SICheckValid.checkValid(errors, "査定内容", getDispValue(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "査定内容", getDispValue(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK);
    }
    return errors.isEmpty();
  }
  
  /**
   * <b>validateModify</b 入力した新規レコードのデータをチェックします。
   * 
   * @param lRequest クライアントからのリクエスト
   * @return なし
   * @throws なし
   */
  
  public boolean validateModify(HttpServletRequest lRequest, Connection lConnection) {
    SICustomErrors errors = new SICustomErrors();
    
    // 査定内容
    SICheckValid.checkValid(errors, "査定内容", getDispValue(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "査定内容", getDispValue(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    
    if (!errors.isEmpty())
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
    else
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK);
    
    return errors.isEmpty();
  }
  
  public void reset(Connection lConnection){
    this.setEditModeTxt(SIConfig.SIEDIT_MODE_UPDATE);
    
    try{
      if(SIUtil.isNull(this.getKeyCode())||SIUtil.isNull(this.getKeyBranch())) return;
      
      StringBuffer sql = new StringBuffer();
      sql.append("SELECT a.*,coalesce(b.branchName,'本部') AS branchName ");
      if (SIUtil.isNotNull(this.getUserBranchCode())&&"1".equals(this.getUserBranchCode())){//東京スタッフの場合
        sql.append(",CASE WHEN a.branchCode IS NULL THEN 1 WHEN a.branchCode='1' THEN 1 ELSE 0 END AS deleteFlg ");
      }else if (SIUtil.isNotNull(this.getUserBranchCode())){//支店スタッフの場合
        sql.append(",CASE WHEN a.branchCode=").append(SIDBUtil.SQL2Str(this.getUserBranchCode())).append(" THEN 1 ELSE 0 END AS deleteFlg ");
      }else{//その他
        sql.append(",1 AS deleteFlg ");
      }
      sql.append("FROM wantedTbl a ");
      sql.append("LEFT OUTER JOIN branchTbl b ON a.branchCode=b.branchCode ");
      sql.append("WHERE a.keyCode = ").append(SIDBUtil.SQL2Str(this.getKeyCode()," "));
      sql.append("AND a.keyBranch = ").append(SIDBUtil.SQL2Str(this.getKeyBranch()));
      
      Statement lStatement = lConnection.createStatement();
      ResultSet lResultSet = lStatement.executeQuery(sql.toString());
      
      if(lResultSet.next()){
        this.setEnableFlg(lResultSet.getString("enableFlg"));
        this.setCmdtyName(lResultSet.getString("cmdtyName"));
        this.setDispValue(lResultSet.getString("dispValue"));
        this.setMemo(lResultSet.getString("memo"));
        this.setBranchCode(lResultSet.getString("branchCode"));
        this.setBranchName(lResultSet.getString("branchName"));
        this.setInitDateTime(lResultSet.getString("initDateTime"));
        this.setUpdateDateTime(lResultSet.getString("updateDateTime"));
        this.setInitUser(lResultSet.getString("initUser"));
        this.setUpdateUser(lResultSet.getString("updateUser"));
        this.setDeleteFlg(lResultSet.getString("deleteFlg"));
      }
    }catch(Exception e){
      e.printStackTrace();
    }
  }
}
