package com.platform.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

import com.base.Custom4exception;
import com.base.CustomException;
import com.platform.controller.FilePackageController;
import com.platform.entities.Brick;
import com.platform.entities.FolderNode;
import com.platform.entities.VolumeEntity;
import com.platform.glusterfs.ClusterInfo;
import com.platform.glusterfs.GetTreeData;
import com.platform.glusterfs.VolumeInfo;
import com.platform.http.gfs.HttpUtils;

public class ThreadVolume extends Thread {
	
	@SuppressWarnings("static-access")
	public static Logger log = Configs.DAILY_ROLLING_LOGGER.getLogger(ThreadVolume.class);

	/**
	 * 挂载点路径 -- 暂时无用的
	 */
	private static String pointPath = "/home";

	/** Volume信息查询 */
	private VolumeInfo volumeInfo = new VolumeInfo();

	private ClusterInfo cluster = new ClusterInfo();

	/** gfs目录树形展示 */
	private GetTreeData gfsTree = new GetTreeData();

	public ThreadVolume() {
	}

	public ThreadVolume(String name) {
		setName(name);
	}

	public ThreadVolume(String name, String path) {
		if (null != path && !"".equals(path.trim())) {
			ThreadVolume.pointPath = path;
		}
	}

	@Override
	public void run() {
		super.run();
		while (true) {
			try {
				getVolumeMsg();
				Thread.sleep(Constant.get_volume_sleep_time);
			} catch (InterruptedException e) {
				new CustomException(
						Custom4exception.threadVolume_Thread_Except, e);
			}

		}

	}

	public static String getPointPath() {
		return pointPath;
	}

	public static void setPointPath(String pointPath) {
		ThreadVolume.pointPath = pointPath;
	}

	public void getVolumeMsg() {
		List<FolderNode> folderlist = new ArrayList<FolderNode>();
		List<VolumeEntity> volumeList = new ArrayList<VolumeEntity>();
		HttpUtils ht = new HttpUtils();
		String rest = ht.sendPost("gfs/getAllvolume", null);
//		JSONArray jsondata = JSONArray.fromObject(volumeList);
		if (null == rest || "".equals(rest)) {
			log.error(" ---    gluster is disconnect !   \n");
			return;
		}
		JSONArray json = JSONArray.fromObject(rest);
		@SuppressWarnings("unchecked")
		List<VolumeEntity> volumes = (List<VolumeEntity>)JSONArray.toCollection(json, VolumeEntity.class);
		for (VolumeEntity volumeEntity : volumes) {
			if (null != volumeEntity.getFolder()) {
				folderlist.addAll(volumeEntity.getFolder());
			}
		}
		volumeList = volumes;
		
//		// brick状态 map集合
//		Map<String, String> brickStatusMap = cluster.showClusterInfo();
//
//		// 查询 volume name
//		List<String> volumeNameList = volumeInfo.showAllVolumeName();
//		if (null != volumeNameList) {
//			for (String volumeName : volumeNameList) {
//				try {
//					VolumeEntity volume = new VolumeEntity();
//					volume.setName(volumeName);
//					List<String> path = volumeInfo
//							.getVolumeMountPoint(volumeName);
//					// 默认加载第一个路径
//					if (null != path) {
//						for (String one : path) {
//							if (!one.contains("df")) {
//								volume.setPath(one);
//							}
//						}
//					}
//					if (null == volume.getPath()) {
//						volume.setPath("");
//					}
//					volume.setAllSize((double) (volumeInfo
//							.getVolumeAvailableSize(volumeName)
//							+ volumeInfo.getVolumeUseSize(volumeName)));
//					// 状态Started,Stopped,Created
//					String status = volumeInfo.getVolumeStatus(volumeName);
//					if ("Started".equals(status)) {
//						volume.setStatus(true);
//					} else {
//						volume.setStatus(false);
//					}
//					volume.setUsedSize((double) volumeInfo.getVolumeUseSize(volumeName));
//					volume.setType(volumeInfo.getVolumeType(volumeName));
//					// TODO 查询brick--
//					// 返回 ip:path
//					List<String> brickStrs = volumeInfo
//							.getVolumeBricks(volumeName);
//					// brick已用大小：
//					Map<String, Double> usedSize = volumeInfo
//							.getVolumebricksDataSize(volumeName);
//					Map<String, Double> availableSize = volumeInfo
//							.getVolumebricksAvailableSize(volumeName);
//
//					List<Brick> brickList = new ArrayList<Brick>();
//					for (String brickIpPath : brickStrs) {
//						Brick b = new Brick();
//						String ipAndpath[] = brickIpPath.split(":");
//						String brickip = ipAndpath[0];
//						String brickpath = ipAndpath[1];
//						// iP , path ,
//						b.setIp(brickip);
//						if (brickStatusMap == null
//								|| brickStatusMap.size() == 0) {
//							b.setStatus(false);
//						} else if (brickStatusMap.containsKey(brickip)) {
//							b.setStatus(true);
//						} else {
//							b.setStatus(false);
//						}
//						b.setPath(brickpath);
//						b.setAvailableSize(availableSize.get(brickIpPath));
//						b.setUsedSize(usedSize.get(brickIpPath));
//						brickList.add(b);
//					}
//					volume.setBrick(brickList);
//
//					// 默认加载第一个路径
//					if (null != path && path.size() > 0) {
//						// 装入 folder：
//						// 查询 每个 volume 下的 folder
//						FolderNode foldertmp = gfsTree.getDatas(path.get(0));
//						folderlist.add(foldertmp);
//					}
//					volumeList.add(volume);
//				} catch (Exception e) {
//					new CustomException(
//							Custom4exception.threadVolume_class_Except, e);
//				}
//			}
//		}
		//  更新folder 目录
		CacheTreeData.setFolders(folderlist);
		CacheTreeData.setVolumeList(volumeList);
	}

}
