package jp.co.sint.beans.mallmgr;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;

import javax.servlet.http.HttpServletRequest;

import jp.co.sint.basic.SIPriceCard;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIUtil;
import jp.co.sint.tools.SIURLParameter;

public class UIRegPriceCard extends SIPriceCard {
  
  private final int maxitem = 100;
  
  public UIRegPriceCard(){}
  
  public UIRegPriceCard(String lCardNumber){
    this.setCardNumber(lCardNumber);
  }
  
  public void setNewCardNumber(Connection lConnection) {
    try {
    this.setCardNumber(SIDBUtil.getFirstData(lConnection, "SELECT max(cardNumber)+1 FROM priceCardTbl"));
    if(SIUtil.isNull(this.getCardNumber())) this.setCardNumber("1");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  
  public void initAdd(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    super.init(lRequest, lUrlParam);
    this.setCardNumber((String)lUrlParam.getParam("cardNumber"));
    this.setIndividualCode((String)lUrlParam.getParam("individualCode"));
  }
  
  public void initDelete(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    super.init(lRequest, lUrlParam);
    this.setCardNumber((String)lUrlParam.getParam("cardNumber"));
    this.setBranchNumber((String)lUrlParam.getParam("branchNumber"));
  }
  
  public boolean validateAdd(HttpServletRequest lRequest,Connection lConnection) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    
    try {
      String max = SIDBUtil.getFirstData(lConnection, "SELECT max(branchnumber) FROM priceCardDetailTbl WHERE cardNumber="+SIDBUtil.SQL2Str(this.getCardNumber())); 
      if (SIUtil.isNull(max)) return true;
      if (Integer.parseInt(max) >= maxitem) {
        errors.addError(new SICustomError("manager.message.freeword","登録可能件数は最大"+String.valueOf(maxitem)+"件までです"));
      }
    } catch (Exception e) {
      e.printStackTrace();
      errors.addError(new SICustomError("database.execute.error"));
    }
    
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    }
    
    return errors.isEmpty();
  }
  
  public Collection getCollection(Connection lConnection,int inx) {
    Collection resultColl = new ArrayList();
    StringBuffer lSqlBuf = new StringBuffer();
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    if (SIUtil.isNull(this.getCardNumber())) return resultColl;
    
    lSqlBuf.append("SELECT b.individualcode,u.cmdtyname,b.branchnumber ");
    lSqlBuf.append("FROM priceCardTbl a,priceCardDetailTbl b,cmdtyUnitTbl u ");
    lSqlBuf.append("WHERE a.cardNumber=b.cardNumber AND b.individualcode=u.individualcode ");
    lSqlBuf.append("AND a.cardNumber=").append(SIDBUtil.SQL2Str(this.getCardNumber()," "));
    if (inx==0) {//中古
      lSqlBuf.append("AND u.usedNewFlg = '0' ");
    } else if (inx==1) {//新品
      lSqlBuf.append("AND u.usedNewFlg IN ('1','6','7') ");
    } else if (inx==2) {//アウトレット
      lSqlBuf.append("AND u.usedNewFlg IN ('2','4') ");
    } else {//BG認定中古+貸与品
      lSqlBuf.append("AND u.usedNewFlg IN ('3','5') ");
    }
    lSqlBuf.append("ORDER BY b.branchnumber");
    
    try {
      
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSqlBuf.toString());
      
      while (lResultSet.next()) {
        SIPriceCard lCard = new SIPriceCard();
        lCard.setIndividualCode(lResultSet.getString("individualCode"));
        lCard.setCmdtyName(lResultSet.getString("cmdtyName"));
        lCard.setBranchNumber(lResultSet.getString("branchNumber"));
        resultColl.add(lCard);
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    
    return resultColl;
  }
}