import Taro from "@tarojs/taro";

globalThis.app = {
    appName: "",//小程序名称
    apiUrl: "https://api.zanxiangwl.com/bookDistribution",//接口地址头部
    appId: "",//当前小程序ID
    system: "",//当前系统环境
    showLog: true,//控制台是否打印日志
    isLoding: false,//是否显示每次请求的加载loding弹窗
    initToken: "",//初始化toekn用于登录时使用
    token: "",//登录后的token
    tokenValid:false,//token是否有效，有效才放行请求，否则重新登录
    appInfo: null,//初始化
    proVersion: "",
    payVersion: "",
    iosShowPay: true,
    envVersion: "develop",
    payData: null,
    enumDictList: null,
}

type ConfigParamList = {}
export interface AppInfo {
    appCategory: 1 | 2,//1长篇 2短篇
    appName: string,//小程序名称
    appVersion: string,//小程序版本
    configParamList: ConfigParamList[],//小程序配置
    distributorId: 1,//分销商ID
    enabled: true,//启用状态
    homePage: string,//主页路径
    id: 4,//
    wechatAppId: string,//小程序ID
    appPageComponentList: AppPageComponent[],//组件配置
    appRechargeTemplateList: RechargeTemplate[],//支付模板
}
interface RechargeTemplate {
    templateDescription: string,//模板描述
    templateName: string,//模板名称
    templateType: 1 | 2,//模板类型 1书币 2vip
    remark: string,//备注
    appType: 1 | 2,//1微信 2抖音
    id: number,
    activateTemplate: boolean,//激活
    rechargeConfigs: {
        firstRecharge: boolean,//是否是首充档位
        rechargeConfigList: Config[],//
    }[]
}
interface Config {
    color: boolean,//背景色
    description: string,//整数购买文案
    extra: string,//右上角描述值
    gearType: 1 | 2,//充值类型 1书币 2 vip
    gift: string,//赠送
    obtain: string,//获得书币/vip每天价格
    price: number,//价格
    subscript: string,//右上角文案 首充|超值等
    vipDays: number,//vip天数
}
interface AppPageComponent {
    pageName: string,//页面名称
    pagePath: string,//页面路径
    id: number,//组件ID
    sharePicUrl: string,//分享图
    shareTitles: string,//分享标题
    pageDesc: string,//页面描述
    appComponentListVOS: {
        workDirection: 0 | 1,//男频女频
        appComponentListVOS: AppComponent[]
    }[]
}
interface AppComponent {
    componentType: "banners" | "hot_books" | "hot_category",
    id: number
}
export interface App {
    appName?: string;//小程序名称
    apiUrl?: string;//接口地址头部
    appId?: string;//当前小程序ID
    system?: string,//当前系统环境
    showLog?: boolean,//控制台是否打印日志
    isLoding?: boolean,//是否显示每次请求的加载loding弹窗
    initToken?: string,//初始化toekn用于登录时使用
    token?: string,//登录后的token
    pathParams?: any,//路径参数
    userInfo?: any
    /**app初始化信息*/
    appInfo?: AppInfo | null,
    /**当前小程序线上版本*/
    proVersion: string,
    /**当前小程序支付版本*/
    payVersion: string,
    /**ios是否展示支付*/
    iosShowPay: boolean,
    /**支付数据*/
    payData: any,
    /**枚举*/
    enumDictList: any
    /**小程序环境*/
    envVersion: "develop" | "trial" | "release",
    tokenValid:boolean
}
export interface SetApp {
    appName?: string;//小程序名称
    apiUrl?: string;//接口地址头部
    appId?: string;//当前小程序ID
    system?: string,//当前系统环境
    showLog?: boolean,//控制台是否打印日志
    isLoding?: boolean,//是否显示每次请求的加载loding弹窗
    initToken?: string,//初始化toekn用于登录时使用
    token?: string,//登录后的token
    pathParams?: any,//路径参数
    userInfo?: any
    /**app初始化信息*/
    appInfo?: AppInfo,
    /**当前小程序线上版本*/
    proVersion?: string,
    /**当前小程序支付版本*/
    payVersion?: string,
    /**ios是否展示支付*/
    iosShowPay?: boolean,
    /**支付数据*/
    payData?: any,
    /**枚举*/
    enumDictList?: any,
    /**小程序环境*/
    envVersion?: "develop" | "trial" | "release",
    tokenValid?:boolean
}
// // 定义全局日志函数
globalThis.log = app.showLog ? console.log : () => { };
/**
 * 传入参数设置全局变量(进入APP后固定不变的参数,并存入到本地)
*/
export function setApp(props?: SetApp) {
    // log("初始化设置APP关键固定参数===>", props)
    if (props) {
        Object.keys(props).forEach((key) => {
            globalThis.app[key] = props[key]
        })
    }
    // log("app====>",app)
    Taro.setStorageSync("app", app)
}
/**
 * 初始化app全局变量
 * */
export function initApp() {
    // 获取本地存储的配置
    const storedApp = Taro.getStorageSync("app") || {};
    
    // 合并默认配置和本地存储的配置
    // 保留本地存储的个性化设置，同时应用代码中的新默认值
    app = {
         ...storedApp, // 本地存储的配置会覆盖同名属性
        ...app// 默认配置（包含了你修改后的新默认值）
       
    };
    
    log("从缓存中读取的app配置:", app)
}
