/*
 * Copyright (c) 2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

sequenceable OHOS.IRemoteObject;
sequenceable RunningLockInfo..OHOS.PowerMgr.RunningLockInfo;
sequenceable RunningLockInfo..OHOS.PowerMgr.VectorPair;
interface OHOS.PowerMgr.IPowerStateCallback;
interface OHOS.PowerMgr.ISyncSleepCallback;
interface OHOS.PowerMgr.ISyncHibernateCallback;
interface OHOS.PowerMgr.IPowerModeCallback;
interface OHOS.PowerMgr.IScreenOffPreCallback;
interface OHOS.PowerMgr.ITakeOverShutdownCallback;
interface OHOS.PowerMgr.IAsyncShutdownCallback;
interface OHOS.PowerMgr.ISyncShutdownCallback;
interface OHOS.PowerMgr.IPowerRunninglockCallback;
interface OHOS.PowerMgr.IPowerMgrAsync;
interface OHOS.PowerMgr.ITakeOverSuspendCallback;
interface OHOS.PowerMgr.IAsyncUlsrCallback;
interface OHOS.PowerMgr.IRunningLockChangedCallback;

interface OHOS.PowerMgr.IPowerMgr {
    [ipccode 0] void CreateRunningLockIpc(
        [in] IRemoteObject remoteObj, [in] RunningLockInfo runningLockInfo,
        [out] int powerError);
    void ReleaseRunningLockIpc([in] IRemoteObject remoteObj, [in] String name);
    void IsRunningLockTypeSupportedIpc([in] int lockType, [out] boolean lockTypesSupported);
    [oneway] void UpdateWorkSourceIpc([in] IRemoteObject remoteObj, [in] int[] workSources);
    void LockIpc([in] IRemoteObject remoteObj, [in] int timeOutMs, [out] int powerError);
    void UnLockIpc([in] IRemoteObject remoteObj, [in] String name, [out] int powerError);
    void QueryRunningLockListsIpc([in] unsigned long displayId, [out] OrderedMap<String, RunningLockInfo> runningLockLists);
    void IsUsedIpc([in] IRemoteObject remoteObj, [out] boolean isUsed);
    void ProxyRunningLockIpc([in] boolean isProxied, [in] int pid, [in] int uid);

    void ProxyRunningLocksIpc([in] boolean isProxied, [in] VectorPair vectorPairInfos);

    void ResetRunningLocksIpc();

    // Used for power state machine.
    void RebootDeviceIpc([in] String reason, [out] int powerError);
    void RebootDeviceForDeprecatedIpc([in] String reason, [out] int powerError);
    void ForceRebootDeviceIpc([in] String reason, [out] int powerError);
    void ShutDownDeviceIpc([in] String reason, [out] int powerError);
    void SetSuspendTagIpc([in] String tag, [out] int powerError);
    void SuspendDeviceIpc([in] long callTimeMs, [in] int reasonValue, [in] boolean suspendImmed, [in] String apiVersion,
        [out] int powerError);
    void WakeupDeviceIpc([in] long callTimeMs, [in] int reasonValue, [in] String details, [in] String apiVersion,
        [out] int powerError);
    [oneway] void WakeupDeviceAsyncIpc([in] long callTimeMs, [in] int reasonValue, [in] String details,
        [in] String apiVersion);
    void RefreshActivityIpc([in] long callTimeMs, [in] int activityType, [in] boolean needChangeBacklight);
    void OverrideScreenOffTimeIpc([in] long timeout, [in] String apiVersion, [out] int powerError);
    void RestoreScreenOffTimeIpc([in] String apiVersion, [out] int powerError);
    void GetStateIpc([out] int powerState);
    void IsScreenOnIpc([in] boolean needPrintLog, [out] boolean isScreenOn);
    void IsFoldScreenOnIpc([out] boolean screenOn);
    void IsCollaborationScreenOnIpc([out] boolean collaborationScreenOn);
    [oneway] void ForceSuspendDeviceIpc([in] long callTimeMs, [in] String apiVersion, [in] IPowerMgrAsync powerProxy);
    void RegisterPowerStateCallbackIpc([in] IPowerStateCallback powerCallback, [in] boolean isSync);
    void UnRegisterPowerStateCallbackIpc([in] IPowerStateCallback powerCallback);

    void RegisterSyncSleepCallbackIpc([in] ISyncSleepCallback powerCallback, [in] int priorityValue);
    void UnRegisterSyncSleepCallbackIpc([in] ISyncSleepCallback powerCallback);

    void RegisterSuspendTakeoverCallbackIpc([in] ITakeOverSuspendCallback takeOverSuspendCallback, [in] int priority);
    void UnRegisterSuspendTakeoverCallbackIpc([in] ITakeOverSuspendCallback takeOverSuspendCallback);

    void RegisterSyncHibernateCallbackIpc([in] ISyncHibernateCallback powerCallback, [in] int priorityValue);
    void UnRegisterSyncHibernateCallbackIpc([in] ISyncHibernateCallback powerCallback);

    // Used for Callback registration upon power mode.
    void RegisterPowerModeCallbackIpc([in] IPowerModeCallback powerCallback);
    void UnRegisterPowerModeCallbackIpc([in] IPowerModeCallback powerCallback);

    void RegisterScreenStateCallbackIpc([in] int remainTime, [in] IScreenOffPreCallback powerCallback);
    void UnRegisterScreenStateCallbackIpc([in] IScreenOffPreCallback powerCallback);

    void SetDisplaySuspendIpc([in] boolean enable);
    [oneway] void HibernateIpc([in] boolean clearMemory, [in] String reason, [in] String apiVersion,
        [in] IPowerMgrAsync powerProxy);
    void SetDeviceModeIpc([in] int modeValue, [out] int powerError);
    void GetDeviceModeIpc([out] int powerMode);
    void ShellDumpIpc([in] String[] args, [in] unsigned int argc, [out] String returnDump);
    void IsStandbyIpc([out] boolean isStandby, [out] int powerError);

    void SetForceTimingOutIpc([in] boolean enabled, [in] IRemoteObject token, [out] int powerError);
    void LockScreenAfterTimingOutIpc([in] boolean enabledLockScreen, [in] boolean checkLock,
        [in] boolean sendScreenOffEvent, [in] IRemoteObject token, [out] int powerError);
    void LockScreenAfterTimingOutWithAppidIpc([in] int appid, [in] boolean lockScreen, [in] IRemoteObject token,
        [out] int powerError);

    void RegisterShutdownCallbackIpc([in] ITakeOverShutdownCallback powerCallback, [in] int priorityValue);
    void UnRegisterShutdownCallbackIpc([in] ITakeOverShutdownCallback powerCallback);

    void RegisterShutdownCallbackIpc([in] IAsyncShutdownCallback powerCallback, [in] int priorityValue);
    void UnRegisterShutdownCallbackIpc([in] IAsyncShutdownCallback powerCallback);
    void RegisterShutdownCallbackIpc([in] ISyncShutdownCallback powerCallback, [in] int priorityValue);
    void UnRegisterShutdownCallbackIpc([in] ISyncShutdownCallback powerCallback);

    void RegisterRunningLockCallbackIpc([in] IPowerRunninglockCallback powerCallback);
    void UnRegisterRunningLockCallbackIpc([in] IPowerRunninglockCallback powerCallback);
    void IsRunningLockEnabledIpc([in] int lockType, [in] unsigned long displayId, [out] boolean lockEnabledResult, [out] int powerError);
    void IsForceSleepingIpc([out] boolean isForceSleeping);

    void RefreshActivityIpc([in] long callTimeMs, [in] int activityType, [in] String refreshReason,
        [out] int powerError);

    void SetPowerKeyFilteringStrategyIpc([in] int strategy, [out] int powerError);
    void GetShutdownReasonIpc([out] String reason, [out] int powerError);

    void RegisterUlsrCallbackIpc([in] IAsyncUlsrCallback ulsrCallback, [out] int powerError);
    void UnRegisterUlsrCallbackIpc([in] IAsyncUlsrCallback ulsrCallback, [out] int powerError);
    void RegisterAsyncShutdownCallbackIpc([in] IAsyncShutdownCallback powerCallback, [in] int priorityValue, [out] int powerError);
    void UnRegisterAsyncShutdownCallbackIpc([in] IAsyncShutdownCallback powerCallback, [out] int powerError);
    void SetProxFilteringStrategyIpc([in] int strategy, [in] IRemoteObject token, [out] int powerError);
    void GetPowerConfigIpc([in] String sceneName, [out] String configVal, [out] int powerError);
    void SetPowerConfigIpc([in] String sceneName, [in] String configVal, [out] int powerError);

    void RegisterRunningLockChangedCallbackIpc([in] IRunningLockChangedCallback powerCallback,
        [in] unsigned long displayId, [out] int powerError);
    void UnRegisterRunningLockChangedCallbackIpc([in] IRunningLockChangedCallback powerCallback,
        [in] unsigned long displayId, [out] int powerError);
}