package com.itant.shiwushu.tool.file;

import android.content.Context;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * Created by Jason on 2018/9/16.
 */

public class FileTool {
    public static void copyAssetToSDCard(Context context) {
        // 把assets文件夹里skin目录和里面的文件拷贝到内部存储里
        try {
            Assets.copyAssets(context.getAssets(), "skin", getRootDir(context));
        } catch (IOException e) {
            e.printStackTrace();
        }
        //File[] binFiles = getBinDir(context).listFiles();
        //for (File binFile : binFiles) {
        // 让所有版本的aapt都具有可执行权限
        //    binFile.setExecutable(true, true);
        //}
    }

    public static void copyRealmToSDCard(Context context) {
        // 把assets文件夹里skin目录和里面的文件拷贝到内部存储里
        try {
            Assets.copyAssets(context.getAssets(), "data", getRootDir(context));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static File getDBDir(Context context) {
        File dir = new File(getRootDir(context), "data");
        //File dbFile = new File(dir, "city.realm");
        return dir;
    }

    public static String getSkinPath(Context context, String skinFullName) {
        File customBgFile = new File(getSkinDir(context), skinFullName);
        return customBgFile.getAbsolutePath();
    }

    // 项目初始化的时候，先把所有的皮肤包复制到/data/data/包名/files/skin，因为copyAssetToSDCard包含skin参数
    public static File getRootDir(Context context) {
        return context.getFilesDir();
    }

    public static File getSkinDir(Context context) {
        File dir = new File(getRootDir(context), "skin");
        return mkdirsIfNotExist(dir);
    }

    private static File mkdirsIfNotExist(File f) {
        if (!f.exists()) {
            f.mkdirs();
        }
        return f;
    }

    public static void copyFile(File srcFile, File destFile)
            throws IOException {
        if (destFile.exists()) {
            destFile.delete();
        }
        destFile.getParentFile().mkdirs();

        InputStream input = new FileInputStream(srcFile);
        OutputStream output = new FileOutputStream(destFile);
        IOUtils.copy(input, output);
        input.close();
        output.close();
    }

    /**
     * 获取发布的缓存目录
     * @param context
     * @return /data/data/包名/files/publish/
     */
    public static File getPublishDir(Context context) {
        File publishDir = new File(context.getFilesDir(), "publish");
        if (!publishDir.exists()) {
            publishDir.mkdirs();
        }
        return publishDir;
    }
}
