/*
 * 作成日: 2004/01/29
 *
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 */
package jp.co.sint.tools;

import java.io.File;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletContext;

import jp.co.sint.basic.SICmdty;
import jp.co.sint.basic.SICmdtyStndrd;
import jp.co.sint.basic.SIShopInfo;
import jp.co.sint.basic.SIWrapping;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDBUtil;

/**
 * @author asakura
 *
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 */
public class SIFileUtil {
	
	//コネクション
	private Connection connection = null;
	
	//コンテキスト
	private ServletContext context = null;
	
	//ショップコード
	private String shopCode = null;
	
	//画像の種類(PC,i-mode,AU,vodafone)
	private int imgType = -1;

	/**
	 * コンストラクタ
	 * @param connection
	 * @param context
	 * @param shopCode
	 */
	public SIFileUtil(ServletContext context,String shopCode){
		this.context = context;
		this.shopCode = shopCode;
	}
		
	/**
	 * コンストラクタ
	 * @param connection
	 * @param context
	 * @param shopCode
	 */
	public SIFileUtil(Connection connection,ServletContext context,String shopCode){
		this.connection = connection;
		this.context = context;
		this.shopCode = shopCode;
	}
	
	/**
	 * 削除するImgの種類を設定する。
	 * @param i
	 */
	public void setImgType(int i){
		this.imgType = i; 
	}
	
	/**
	 * 削除するImgの種類を取り出す。
	 * @return
	 */
	public int getImgType(){
		return this.imgType;
	}
	
	/**
	 * 任意のフォルダの任意の画像を削除する
	 */
	public void delFile(int index,String fileName){
		if(SIUtil.isNotNull(fileName)){
			fileDelete(index,shopCode+"/"+fileName);
		}
	}
	
	/**
	 * ショップの全ての画像を削除する。
	 * @throws SQLException
	 */
	public void delShopAll() throws SQLException{
		//PC
		this.setImgType(SIConfig.SISUFFIX_IMAGE_TYPE_PC);
		this.shopInfoImgDel();
		this.wrappingImgDel();
		this.cmdtyImgDel();
		this.stndrdImgDel();
		this.bannerImgDel();
		//i-mode
		this.setImgType(SIConfig.SISUFFIX_IMAGE_TYPE_IMODE);
		this.cmdtyImgDel();
		this.stndrdImgDel();	
		//AU
		this.setImgType(SIConfig.SISUFFIX_IMAGE_TYPE_AU);
		this.cmdtyImgDel();
		this.stndrdImgDel();		
		//vodafone
		this.setImgType(SIConfig.SISUFFIX_IMAGE_TYPE_VOD);
		this.cmdtyImgDel();
		this.stndrdImgDel();
		
		//フォルダも削除
		dirDeleteAll();
	}
	
	/**
	 * 商品の全ての画像を削除する。
	 * @throws SQLException
	 */
	public void delCmdtyAll(String CmdtyCode) throws SQLException{
		//PC
		this.setImgType(SIConfig.SISUFFIX_IMAGE_TYPE_PC);
		this.cmdtyImgDel(CmdtyCode);
		this.stndrdImgDel(CmdtyCode);
		this.bannerImgDel(CmdtyCode);
		//i-mode
		this.setImgType(SIConfig.SISUFFIX_IMAGE_TYPE_IMODE);
		this.cmdtyImgDel(CmdtyCode);
		this.stndrdImgDel(CmdtyCode);		
		//AU
		this.setImgType(SIConfig.SISUFFIX_IMAGE_TYPE_AU);
		this.cmdtyImgDel(CmdtyCode);
		this.stndrdImgDel(CmdtyCode);		
		//vodafone
		this.setImgType(SIConfig.SISUFFIX_IMAGE_TYPE_VOD);
		this.cmdtyImgDel(CmdtyCode);
		this.stndrdImgDel(CmdtyCode);
	}
	
	//規格の全ての画像を削除する。
	public void delStndrdAll(String CmdtyCode,String StndrdCode1,String ElementCode1,String StndrdCode2,String ElementCode2){
		//PC
		this.setImgType(SIConfig.SISUFFIX_IMAGE_TYPE_PC);
		this.stndrdImgDel(CmdtyCode,StndrdCode1,ElementCode1,StndrdCode2,ElementCode2);
		//i-mode
		this.setImgType(SIConfig.SISUFFIX_IMAGE_TYPE_IMODE);
		this.stndrdImgDel(CmdtyCode,StndrdCode1,ElementCode1,StndrdCode2,ElementCode2);
		//AU
		this.setImgType(SIConfig.SISUFFIX_IMAGE_TYPE_AU);
		this.stndrdImgDel(CmdtyCode,StndrdCode1,ElementCode1,StndrdCode2,ElementCode2);
		//vodafone
		this.setImgType(SIConfig.SISUFFIX_IMAGE_TYPE_VOD);
		this.stndrdImgDel(CmdtyCode,StndrdCode1,ElementCode1,StndrdCode2,ElementCode2);
	}
	
	/**
	 * ショップ紹介の画像を全て削除する。
	 */
	public void shopInfoImgDel(){
		//ファイルの削除
		shopInfoImgDel(1);
		shopInfoImgDel(2);
		shopInfoImgDel(3);
		shopInfoImgDel(4);
		shopInfoImgDel(5);
		shopInfoImgDel(6);
	}
	
	/**
	 * ショップ紹介の画像を削除する。
	 * index 1:画像１ 2:画像２ 3:画像３ 4:画像４ 5:画像５ 6:画像６
	 * @param index
	 */
	public void shopInfoImgDel(int index){
		int path = -1;
		switch(imgType){
			case SIConfig.SISUFFIX_IMAGE_TYPE_PC:
				path = SIConfig.SIUPLOAD_INX_SHOP;
				break;
		}
		SIShopInfo shopInfo = new SIShopInfo(this.shopCode);
		//ファイルの削除
		this.fileDelete(path,shopInfo.getImageFileName(imgType,index));
	}
	
	/**
	 * ショップのラッピング画像を全て削除する
	 */
	public void wrappingImgDel() throws SQLException{
		String str = "SELECT WrappingCode FROM WrappingMtbl Where ShopCode = "+SIDBUtil.SQL2Str(this.shopCode);
		
		Statement statement = this.connection.createStatement();
		ResultSet resultSet = statement.executeQuery(str);
    while(resultSet.next()){
      wrappingImgDel(resultSet.getString("WrappingCode"));
    }
    SIDBUtil.close(statement,resultSet);
	}
	
	/**
	 * ラッピング画像を削除する
	 * @param WrappingCode
	 */
	public void wrappingImgDel(String WrappingCode){
		SIWrapping wrapping = new SIWrapping(this.shopCode,WrappingCode);
		this.fileDelete(SIConfig.SIUPLOAD_INX_WRAPPING,wrapping.getImageFileName(SIConfig.SISUFFIX_IMAGE_TYPE_PC));
	}

	/**
	 * ショップの商品画像を全て削除
	 */
	public void cmdtyImgDel() throws SQLException{
		String str = "SELECT CmdtyCode FROM CmdtyMtbl Where ShopCode = "+SIDBUtil.SQL2Str(this.shopCode);
		
		Statement statement = this.connection.createStatement();
		ResultSet resultSet = statement.executeQuery(str);
		while(resultSet.next()){
			cmdtyImgDel(resultSet.getString("CmdtyCode"));
		}
    SIDBUtil.close(statement,resultSet);
	}
	
	/**
	 * 商品の画像を全て削除
	 * @param CmdtyCode
	 */
	public void cmdtyImgDel(String CmdtyCode){
		cmdtyImgDel(CmdtyCode,0);
		cmdtyImgDel(CmdtyCode,1);
		cmdtyImgDel(CmdtyCode,2);
	}
	
	/**
	 * 商品の画像をindexの値によって一つ削除
	 * index 0:サムネイル 1:画像１ 2:画像2
	 * @param CmdtyCode
	 * @param index
	 */
	public void cmdtyImgDel(String CmdtyCode,int index){
		int path = -1;
		switch(imgType){
			case SIConfig.SISUFFIX_IMAGE_TYPE_PC:
				path = SIConfig.SIUPLOAD_INX_CMDTY;
				break;
			case SIConfig.SISUFFIX_IMAGE_TYPE_IMODE:
				path = SIConfig.SIUPLOAD_INX_I_CMDTY;
				break;
			case SIConfig.SISUFFIX_IMAGE_TYPE_AU:
				path = SIConfig.SIUPLOAD_INX_A_CMDTY;
				break;
			case SIConfig.SISUFFIX_IMAGE_TYPE_VOD:
				path = SIConfig.SIUPLOAD_INX_V_CMDTY;
				break;
		}
		SICmdty cmdty = new SICmdty(this.shopCode,CmdtyCode);
		//ファイルの削除
		switch(index){
			case 0:this.fileDelete(path,cmdty.getImageFileName1(imgType));
			case 1:this.fileDelete(path,cmdty.getImageFileName2(imgType));
			case 2:this.fileDelete(path,cmdty.getThumImageFileName(imgType));
		}
	}
	
	/**
	 * ショップの規格画像を全て削除
	 * PC用
	 */
	public void stndrdImgDel() throws SQLException{
		String str = " SELECT CmdtyCode,StndrdCode1,ElementCode1,StndrdCode2,ElementCode2 "
				   + " FROM CmdtyStndrdMtbl WHERE ShopCode = "+SIDBUtil.SQL2Str(this.shopCode);
		
		Statement statement = this.connection.createStatement();
		ResultSet resultSet = statement.executeQuery(str);
		while(resultSet.next()){
			this.stndrdImgDel(resultSet.getString("CmdtyCode"),
								  resultSet.getString("StndrdCode1"),
								  resultSet.getString("ElementCode1"),
								  resultSet.getString("StndrdCode2"),
								  resultSet.getString("ElementCode2"));
		}
    SIDBUtil.close(statement,resultSet);
	}
	
	/**
	 * 商品の規格画像を全て削除
	 * PC用
	 * @param CmdtyCode
	 * @throws SQLException
	 */
	public void stndrdImgDel(String CmdtyCode) throws SQLException{
		
		String str = " SELECT StndrdCode1,ElementCode1,StndrdCode2,ElementCode2 FROM CmdtyStndrdMtbl "
				   + " WHERE ShopCode = "+SIDBUtil.SQL2Str(this.shopCode)
				   + " AND CmdtyCode = "+SIDBUtil.SQL2Str(CmdtyCode);
		
		Statement statement = this.connection.createStatement();
		ResultSet resultSet = statement.executeQuery(str);
		while(resultSet.next()){
			this.stndrdImgDel(CmdtyCode,
								  resultSet.getString("StndrdCode1"),
								  resultSet.getString("ElementCode1"),
								  resultSet.getString("StndrdCode2"),
								  resultSet.getString("ElementCode2"));
		}
    SIDBUtil.close(statement,resultSet);
	}
	
	/**
	 * 規格画像を削除
	 * PC用
	 * @param CmdtyCode
	 * @param StndrdCode1
	 * @param ElementCode1
	 * @param StndrdCode2
	 * @param ElementCode2
	 */
	public void stndrdImgDel(String CmdtyCode,String StndrdCode1,String ElementCode1,String StndrdCode2,String ElementCode2){
		int path = -1;
		switch(imgType){
			case SIConfig.SISUFFIX_IMAGE_TYPE_PC:
				path = SIConfig.SIUPLOAD_INX_CMDTY;
				break;
			case SIConfig.SISUFFIX_IMAGE_TYPE_IMODE:
				path = SIConfig.SIUPLOAD_INX_I_CMDTY;
				break;
			case SIConfig.SISUFFIX_IMAGE_TYPE_AU:
				path = SIConfig.SIUPLOAD_INX_A_CMDTY;
				break;
			case SIConfig.SISUFFIX_IMAGE_TYPE_VOD:
				path = SIConfig.SIUPLOAD_INX_V_CMDTY;
				break;
		}
		SICmdtyStndrd cmdtyStndrd = new SICmdtyStndrd(this.shopCode,CmdtyCode,StndrdCode1,ElementCode1,StndrdCode2,ElementCode2);
		//ファイルの削除
		this.fileDelete(path,cmdtyStndrd.getImageFileName(imgType));
	}
	
	/**
	 * ショップのバナーファイルを全て削除する。
	 * @throws SQLException
	 */
	public void bannerImgDel() throws SQLException{
		String str = " SELECT bannerFile FROM CmdtyMtbl "
				   + " WHERE ShopCode = "+SIDBUtil.SQL2Str(this.shopCode);
				   
		Statement statement = this.connection.createStatement();
		ResultSet resultSet = statement.executeQuery(str);
		while(resultSet.next()){
			if(SIUtil.isNotNull(resultSet.getString("bannerFile"))){
				this.delFile(SIConfig.SIUPLOAD_INX_CMDTY,resultSet.getString("bannerFile"));
			}
		}
    SIDBUtil.close(statement,resultSet);
	}
	
	public void bannerImgDel(String CmdtyCode) throws SQLException{
	  //7.3.0 PI-NES0501 修正　ここから
		String str = " SELECT commoditybannerFile FROM individualtbl "
				   + " WHERE ShopCode = "+SIDBUtil.SQL2Str(this.shopCode)
				   + " AND CmdtyCode = "+SIDBUtil.SQL2Str(CmdtyCode);
		//7.3.0 PI-NES0501 修正　ここまで
		Statement statement = this.connection.createStatement();
		ResultSet resultSet = statement.executeQuery(str);
		
		if(resultSet.next() && SIUtil.isNotNull(resultSet.getString("bannerFile"))){
			this.delFile(SIConfig.SIUPLOAD_INX_CMDTY,resultSet.getString("bannerFile"));
		}
    SIDBUtil.close(statement,resultSet);
	}
	
	/**
	 * 全てのディレクトリを削除
	 */
	public void dirDeleteAll(){
		for(int i=0;i<SIConfig.SIUPLOAD_FOLDER.length;i++){
			fileDelete(i,this.shopCode);
		}
	}
		
	/**
	 * ファイルを削除。
	 * @param index
	 * @param fileName
	 */
	public void fileDelete(int index,String fileName){

		File file = new File(this.getPath(index),fileName);
		
		if(file.exists()){
			file.delete();
		}
	}
	
	/**
	 * ファイルのパスを返す。
	 * @param index
	 * @return
	 */
	public String getPath(int index){
		return this.context.getRealPath(SIConfig.SIUPLOAD_FOLDER[index]);
	}
}
