package com.sxyz.rfid.greendao;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Build;
import android.os.Environment;
import android.util.Log;

import com.sxyz.rfid.BuildConfig;

import org.greenrobot.greendao.query.QueryBuilder;

import java.io.File;

import sql.com.yz.db.DaoMaster;
import sql.com.yz.db.DaoSession;

/**
 * @Description: java类作用描述
 * @Author: chunyuan.wu
 * @CreateDate: 5/12/23 5:31 PM
 * @Version: 1.0
 */
public class GreenDaoManager1122 {
    private static final String TAG = GreenDaoManager1122.class.getSimpleName();
    public static final String DB_NAME = "wms_data.db";

    private Context context;

    //多线程中要被共享的使用volatile关键字修饰
    private volatile static GreenDaoManager1122 manager = new GreenDaoManager1122();
    private static DaoMaster sDaoMaster;
    private static DaoMaster.DevOpenHelper sHelper;
    private static DaoSession sDaoSession;

    /**
     * 单例模式获得操作数据库对象
     *
     * @return
     */
    public static GreenDaoManager1122 getInstance() {
        return manager;
    }

    private GreenDaoManager1122() {
        setDebug();
    }

    public void init(Context context) {
        this.context = context;
    }

    /**
     * 判断是否有存在数据库，如果没有则创建
     *
     * @return
     */
    public DaoMaster getDaoMaster() {
        if (sDaoMaster == null) {
            // 获取外部存储的数据库目录
            File dbDir = getExternalDatabaseDir(context);
            // 确保目录存在
            if (!dbDir.exists()) {
                dbDir.mkdirs();
            }
            // 数据库文件路径
            File dbFile = new File(dbDir, DB_NAME);
//            /storage/emulated/0/Android/data/com.sxyz.rfid/files/databases/rfid.db
            DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, dbFile.getAbsolutePath(), null);
            if (dbFile.exists()) {
                // 文件已经存在，使用只读方式打开或特殊处理
                SQLiteDatabase db = SQLiteDatabase.openDatabase(dbFile.getPath(), null, SQLiteDatabase.OPEN_READWRITE);
                // 数据库文件已存在
                sDaoMaster = new DaoMaster(db);

            } else {
//                数据库文件不存在，创建数据库文件
//                sDaoMaster = new DaoMaster(helper.getWritableDatabase());
//                String msg = "数据库" + DB_NAME + "文件不存在，请连接电脑同步数据库文件";
//                ToastUtil.showShort(msg);
//                TipsDialog mTipsDialog = new TipsDialog(context);
//                mTipsDialog.init(R.layout.dialog_offline_tips, msg);
//                mTipsDialog.show();
//                new AlertDialogUtil(context).builder()
//                        .setTitle("提示")
//                        .setMsg("数据库" + DB_NAME + "文件不存在，请连接电脑同步数据库文件")
//                        .setPositiveButton("确定", null)
//                        .show();
            }
        }
        return sDaoMaster;
    }

    public static boolean isFileExist(Context context) {
        try {
            // 方法1：使用 Environment.getExternalStorageDirectory()（Android 10以下）
            String path;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                // Android 10+ 使用 Scoped Storage
                path = context.getExternalFilesDir(null) + "/databases/wms_data.db";
            } else {
                // Android 10以下
                path = Environment.getExternalStorageDirectory() + "/Android/data/" + context.getPackageName() + "/files/databases/wms_data.db";
            }
            File dbFile = new File(path);
            return dbFile.exists();
        } catch (Exception e) {
            Log.e("FileCheck", "检查文件出错", e);
            return false;
        }
    }

    private static File getExternalDatabaseDir(Context context) {
        // Android 10 以下版本
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
            return new File(Environment.getExternalStorageDirectory(), "Android/data/" + context.getPackageName() + "/files/databases/wms_data.db");
        }
        // Android 10 及以上版本 - 使用应用专属外部存储
        return new File(context.getExternalFilesDir(null), "databases");
    }


    /**
     * 完成对数据库的添加、删除、修改、查询操作，仅仅是一个接口
     *
     * @return
     */
    public DaoSession getDaoSession() {
        if (sDaoSession == null) {
            if (sDaoMaster == null) {
                sDaoMaster = getDaoMaster();
            }
            sDaoSession = sDaoMaster.newSession();
        }
        return sDaoSession;
    }

    /**
     * 打开输出日志，默认关闭
     */
    public void setDebug() {
        if (BuildConfig.DEBUG) {
            QueryBuilder.LOG_SQL = true;
            QueryBuilder.LOG_VALUES = true;
        }
    }

    /**
     * 关闭所有的操作，数据库开启后，使用完毕要关闭
     */
    public void closeConnection() {
        closeHelper();
        closeDaoSession();
    }

    public void closeHelper() {
        if (sHelper != null) {
            sHelper.close();
            sHelper = null;
        }
    }

    public void closeDaoSession() {
        if (sDaoSession != null) {
            sDaoSession.clear();
            sDaoSession = null;
        }
    }
}
