package com.starcharge.component.datastore.fileio;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import com.ihidea.core.support.exception.ServiceException;
import com.ihidea.core.util.JSONUtilsEx;
import com.starcharge.component.datastore.DataStoreService;
import com.starcharge.component.datastore.dao.model.CptDataStore;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

/**
 * 七牛云存储
 * 暂未集成, 参考官方文档 https://developer.qiniu.com/kodo/sdk/1239/java
 */
@Component
@Lazy
public class FileIoQiniu implements IFileIo {

	private static Log logger = LogFactory.getLog(FileIoQiniu.class);

	@Autowired
	private DataStoreService dataStoreService;

	/**
	 * 保存到存储路径
	 */
	@Override
	public void save(FileIoEntity entity) {
		saveFile(entity.getDataInfo().getId(), entity.getContent(), entity.getDataInfo().getStoreName());
	}

	/**
	 * 保存到备份存储路径
	 */
	@Override
	public void saveBak(FileIoEntity entity) {
		throw new ServiceException("未实现");
	}

	private static Map<String, Map<String, String>> bucketMap = new HashMap<String, Map<String, String>>();

	@SuppressWarnings("unchecked")
	private synchronized Map<String, String> initBucketInfo(String storeName) {

		CptDataStore cptDataStore = dataStoreService.getInfoByName(storeName);
		Map<String, String> bucketInfo = JSONUtilsEx.deserialize(cptDataStore.getPath(), Map.class);
		bucketMap.put(storeName, bucketInfo);

		return bucketInfo;
	}

	/**
	 * 持久化
	 */
	private void saveFile(String id, InputStream is, String storeName) {
		//TODO 集成上传
	}

	private void saveFile(String id, byte[] content, String storeName) {

		try {
			InputStream is = new ByteArrayInputStream(content);
			saveFile(id, is, storeName);
		} catch (Exception e) {
			throw new ServiceException("云存储上传出现异常:" + e.getMessage(), e);
		}
	}

	public boolean remove(String id, String sotreName) {
		//TODO 集成删除
		return false;
	}

	@Override
	public boolean remove(FileIoEntity entity) {
		return remove(entity.getDataInfo().getId(), entity.getDataInfo().getStoreName());
	}

	@Override
	public byte[] get(String id) {
		return null;
	}

	@Override
	public void execute(FileIoEntity fileIoEntity, IFileInputStream fileInputStreamImpl) throws Exception {
		throw new ServiceException("未实现");
	}

	/**
	 * 先删除,后上传
	 */
	@Override
	public void updateContent(String id, byte[] content) {
		throw new ServiceException("未实现");
	}
}