/**
 * ydd-fast
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package com.yiqi.oss.cloud;

/**
 * 文件上传Factory
 *
 * @author chenshun
 * @email sunlightcs@gmail.com
 * @date 2017-03-26 10:18
 */
public final class OSSFactory {

    private static CloudStorageService cloudStorageService;

    public static CloudStorageService build(CloudStorageConfig config) {
        if (cloudStorageService != null) {
            return cloudStorageService;
        }
        if (config.getType() == CloudService.ALIYUN.getValue()) {
            cloudStorageService = new AliyunCloudStorageService(config);
        } else if (config.getType() == CloudService.QCLOUD.getValue()) {
            cloudStorageService = new QcloudCloudStorageService(config);
        } else if (config.getType() == CloudService.LOCAL.getValue()) {
            //本地
            cloudStorageService = new LocalStorageService(config);
        } else if (config.getType() == CloudService.GOGGLE.getValue()) {
            //谷歌
            cloudStorageService = new GoggleStorageService(config);
        }
        return cloudStorageService;
    }

    /**
     * 云服务商
     */
    public enum CloudService {
        /**
         * 七牛云
         */
        QINIU(1),
        /**
         * 阿里云
         */
        ALIYUN(2),
        /**
         * 腾讯云
         */
        QCLOUD(3),

        /**
         * 本地
         */
        LOCAL(4),

        /**
         * 谷歌
         */
        GOGGLE(5);

        private int value;

        CloudService(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }
}
