package com.ttstd.controlled.activity.activation;

import android.content.Context;

import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;

import com.ttstd.controlled.base.mvvm.BaseViewModel;
import com.ttstd.controlled.network.DeviceRepository;

/**
 * 激活页 ViewModel。
 *
 * 通过 Retrofit + RxJava3 执行 provision + token 流程，
 * 订阅由 BaseViewModel 的 CompositeDisposable 托管，页面销毁时自动取消。
 */
public class ActivationViewModel extends BaseViewModel {

    /** 是否正在激活（控制进度条与按钮可用性）。 */
    private final MutableLiveData<Boolean> loading = new MutableLiveData<>(false);
    /** 激活成功事件。 */
    private final MutableLiveData<Boolean> success = new MutableLiveData<>();
    /** 激活失败原因。 */
    private final MutableLiveData<String> error = new MutableLiveData<>();

    private DeviceRepository repository;

    public LiveData<Boolean> getLoading() {
        return loading;
    }

    public LiveData<Boolean> getSuccess() {
        return success;
    }

    public LiveData<String> getError() {
        return error;
    }

    public void init(Context context) {
        if (repository == null) {
            repository = new DeviceRepository(context);
        }
    }

    /**
     * 点击「重新激活」：清空本地旧凭据后走完整 provision 流程。
     */
    public void activate() {
        if (repository == null) {
            error.setValue("仓库未初始化");
            return;
        }
        if (Boolean.TRUE.equals(loading.getValue())) {
            return; // 防重复点击
        }
        loading.setValue(true);
        execute(repository.reactivate(),
                token -> {
                    loading.setValue(false);
                    success.setValue(true);
                },
                e -> {
                    loading.setValue(false);
                    String msg = e != null ? e.getMessage() : null;
                    error.setValue(msg == null || msg.isEmpty() ? "未知错误" : msg);
                });
    }
}
