package cc.winboll.studio.powerbell.models;

import android.os.Parcel;
import android.os.Parcelable;
import android.util.JsonReader;
import android.util.JsonWriter;

import java.io.IOException;
import java.io.Serializable;

import cc.winboll.studio.libappbase.BaseBean;
import cc.winboll.studio.libappbase.LogUtils;

/**
 * @Author ZhanGSKen&豆包大模型<zhangsken@qq.com>
 * @Date 2025/12/17 15:55
 * @Describe 服务控制参数模型：管理服务启用状态，支持序列化、Parcel传递、JSON解析
 */
public class ControlCenterServiceBean extends BaseBean implements Parcelable, Serializable {
    // ================================== 静态常量（置顶统一管理，避免魔法值）=================================
    private static final long serialVersionUID = 1L; // Serializable 必备，保障反序列化兼容
    private static final String TAG = "ControlCenterServiceBean";
    // JSON 字段常量，避免硬编码，减少拼写错误
    private static final String JSON_FIELD_IS_ENABLE_SERVICE = "isEnableService";

    // ================================== 核心成员变量（私有封装，规范命名）=================================
    private boolean isEnableService = false; // 服务启用状态：true=启用，false=禁用

    // ================================== Parcelable 静态创建器（必须 public static final，适配 API30 传递）=================================
    public static final Parcelable.Creator<ControlCenterServiceBean> CREATOR = new Parcelable.Creator<ControlCenterServiceBean>() {
        @Override
        public ControlCenterServiceBean createFromParcel(Parcel source) {
            LogUtils.d(TAG, "Parcelable createFromParcel: 从Parcel反序列化对象");
            // Java7 + API30 适配：Parcel 无直接 writeBoolean，用 byte 存储/读取
            boolean isEnable = source.readByte() != 0;
            ControlCenterServiceBean bean = new ControlCenterServiceBean(isEnable);
            LogUtils.d(TAG, "Parcelable createFromParcel: 反序列化完成，isEnableService=" + isEnable);
            return bean;
        }

        @Override
        public ControlCenterServiceBean[] newArray(int size) {
            LogUtils.d(TAG, "Parcelable newArray: 创建数组，长度=" + size);
            return new ControlCenterServiceBean[size];
        }
    };

    // ================================== 构造方法（无参+有参，满足不同初始化场景）=================================
    /**
     * 无参构造（JSON解析、反射创建必备）
     */
    public ControlCenterServiceBean() {
        this.isEnableService = false;
        LogUtils.d(TAG, "无参构造：初始化服务状态为禁用（false）");
    }

    /**
     * 有参构造（指定服务启用状态）
     * @param isEnableService 服务启用状态
     */
    public ControlCenterServiceBean(boolean isEnableService) {
        this.isEnableService = isEnableService;
        LogUtils.d(TAG, "有参构造：初始化服务状态，isEnableService=" + isEnableService);
    }

    // ================================== Getter/Setter 方法（封装成员变量，控制访问）=================================
    public boolean isEnableService() {
        LogUtils.d(TAG, "get isEnableService: 当前状态=" + isEnableService);
        return isEnableService;
    }

    public void setIsEnableService(boolean isEnableService) {
        LogUtils.d(TAG, "set isEnableService: 旧状态=" + this.isEnableService + "，新状态=" + isEnableService);
        this.isEnableService = isEnableService;
    }

    // ================================== 父类 BaseBean 方法重写（核心业务逻辑）=================================
    @Override
    public String getName() {
        String className = ControlCenterServiceBean.class.getName();
        LogUtils.d(TAG, "getName: 返回类名=" + className);
        return className;
    }

    /**
     * 序列化对象到 JSON（适配数据持久化/网络传输）
     */
    @Override
    public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
        LogUtils.d(TAG, "writeThisToJsonWriter: 开始将对象序列化到JSON");
        super.writeThisToJsonWriter(jsonWriter);
        // 写入服务启用状态字段
        jsonWriter.name(JSON_FIELD_IS_ENABLE_SERVICE).value(this.isEnableService);
        LogUtils.d(TAG, "writeThisToJsonWriter: JSON序列化完成，字段=" + JSON_FIELD_IS_ENABLE_SERVICE + "，值=" + this.isEnableService);
    }

    /**
     * 从 JSON 反序列化创建对象（适配数据恢复）
     */
    @Override
    public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException {
        LogUtils.d(TAG, "readBeanFromJsonReader: 开始从JSON反序列化对象");
        ControlCenterServiceBean bean = new ControlCenterServiceBean();
        jsonReader.beginObject();
        while (jsonReader.hasNext()) {
            String fieldName = jsonReader.nextName();
            if (JSON_FIELD_IS_ENABLE_SERVICE.equals(fieldName)) {
                // 读取并设置服务启用状态
                boolean isEnable = jsonReader.nextBoolean();
                bean.setIsEnableService(isEnable);
                LogUtils.d(TAG, "readBeanFromJsonReader: 读取JSON字段，" + fieldName + "=" + isEnable);
            } else {
                // 跳过未知字段，避免解析异常
                jsonReader.skipValue();
                LogUtils.w(TAG, "readBeanFromJsonReader: 跳过未知JSON字段=" + fieldName);
            }
        }
        jsonReader.endObject();
        LogUtils.d(TAG, "readBeanFromJsonReader: JSON反序列化完成");
        return bean;
    }

    // ================================== Parcelable 接口方法实现（适配 Intent 组件间传递）=================================
    @Override
    public int describeContents() {
        // 无特殊内容（如文件描述符），返回0即可（API30 标准实现）
        LogUtils.d(TAG, "describeContents: 返回内容描述符=0");
        return 0;
    }

    /**
     * 序列化对象到 Parcel（Intent 传递必备，Java7 适配）
     */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        LogUtils.d(TAG, "writeToParcel: 开始将对象序列化到Parcel，flags=" + flags);
        // Java7 + API30 适配：Parcel 无 writeBoolean 方法，用 byte 存储（1=true，0=false）
        dest.writeByte((byte) (this.isEnableService ? 1 : 0));
        LogUtils.d(TAG, "writeToParcel: Parcel序列化完成，isEnableService=" + this.isEnableService + "（存储为byte=" + (this.isEnableService ? 1 : 0) + "）");
    }
}

