/*
 * Task Scheduler Service interface
 *
 * Copyright (C) 2008 Google (Roy Shea)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 *
 */

import "oaidl.idl";
import "oleidl.idl";

[
    local,
    object,
    uuid(148BD528-A2AB-11CE-B11F-00AA00530503),
    pointer_default(unique)
]
interface IEnumWorkItems : IUnknown
{
    HRESULT Next(
            [in]   ULONG celt,
            [out]  LPWSTR **rgpwszNames,
            [out]  ULONG *pceltFetched);

    HRESULT Skip(
            [in]  ULONG celt);

    HRESULT Reset();

    HRESULT Clone(
            [out]  IEnumWorkItems **ppEnumWorkItems);
}

cpp_quote("#ifndef _HPROPSHEETPAGE_DEFINED")
typedef struct _PSP *HPROPSHEETPAGE;
cpp_quote("#define _HPROPSHEETPAGE_DEFINED")
cpp_quote("#endif")

[
    local,
    object,
    uuid(4086658a-cbbb-11cf-b604-00c04fd8d565),
    pointer_default(unique)
]
interface IProvideTaskPage : IUnknown
{
    typedef enum _TASKPAGE {
        TASKPAGE_TASK       = 0,
        TASKPAGE_SCHEDULE   = 1,
        TASKPAGE_SETTINGS   = 2
    } TASKPAGE;

    HRESULT GetPage(
            [in]   TASKPAGE tpType,
            [in]   BOOL fPersistChanges,
            [out]  HPROPSHEETPAGE *phPage);
}

[
    local,
    object,
    uuid(148BD52B-A2AB-11CE-B11F-00AA00530503),
    pointer_default(unique)
]
interface ITaskTrigger : IUnknown
{
    typedef enum _TASK_TRIGGER_TYPE {
        TASK_TIME_TRIGGER_ONCE              = 0,
        TASK_TIME_TRIGGER_DAILY             = 1,
        TASK_TIME_TRIGGER_WEEKLY            = 2,
        TASK_TIME_TRIGGER_MONTHLYDATE       = 3,
        TASK_TIME_TRIGGER_MONTHLYDOW        = 4,
        TASK_EVENT_TRIGGER_ON_IDLE          = 5,
        TASK_EVENT_TRIGGER_AT_SYSTEMSTART   = 6,
        TASK_EVENT_TRIGGER_AT_LOGON         = 7
    } TASK_TRIGGER_TYPE, *PTASK_TRIGGER_TYPE;

    typedef struct _DAILY {
        WORD DaysInterval;
    } DAILY;

    typedef struct _WEEKLY {
        WORD WeeksInterval;
        WORD rgfDaysOfTheWeek;
    } WEEKLY;

    typedef struct _MONTHLYDATE {
        DWORD rgfDays;
        WORD rgfMonths;
    } MONTHLYDATE;

    typedef struct _MONTHLYDOW {
        WORD wWhichWeek;
        WORD rgfDaysOfTheWeek;
        WORD rgfMonths;
    } MONTHLYDOW;

    typedef union _TRIGGER_TYPE_UNION {
        DAILY Daily;
        WEEKLY Weekly;
        MONTHLYDATE MonthlyDate;
        MONTHLYDOW MonthlyDOW;
    } TRIGGER_TYPE_UNION;

    typedef struct _TASK_TRIGGER {
        WORD cbTriggerSize;
        WORD Reserved1;
        WORD wBeginYear;
        WORD wBeginMonth;
        WORD wBeginDay;
        WORD wEndYear;
        WORD wEndMonth;
        WORD wEndDay;
        WORD wStartHour;
        WORD wStartMinute;
        DWORD MinutesDuration;
        DWORD MinutesInterval;
        DWORD rgFlags;
        TASK_TRIGGER_TYPE TriggerType;
        TRIGGER_TYPE_UNION Type;
        WORD Reserved2;
        WORD wRandomMinutesInterval;
    } TASK_TRIGGER, *PTASK_TRIGGER;

    HRESULT SetTrigger(
            [in]  const PTASK_TRIGGER pTrigger);

    HRESULT GetTrigger(
            [out]  PTASK_TRIGGER pTrigger);

    HRESULT GetTriggerString(
            [out]  LPWSTR *ppwszTrigger);
}

[
    local,
    object,
    uuid(a6b952f0-a4b1-11d0-997d-00aa006887ec),
    pointer_default(unique)
]
interface IScheduledWorkItem : IUnknown
{
    HRESULT CreateTrigger(
            [out]  WORD *piNewTrigger,
            [out]  ITaskTrigger **ppTrigger);

    HRESULT DeleteTrigger(
            [in]  WORD iTrigger);

    HRESULT GetTriggerCount(
            [out]  WORD *plCount);

    HRESULT GetTrigger(
            [in]   WORD iTrigger,
            [out]  ITaskTrigger **ppTrigger);

    HRESULT GetTriggerString(
            [in]   WORD iTrigger,
            [out]  LPWSTR *ppwszTrigger);

    HRESULT GetRunTimes(
            [in]       const LPSYSTEMTIME pstBegin,
            [in]       const LPSYSTEMTIME pstEnd,
            [in, out]  WORD *pCount,
            [out]      LPSYSTEMTIME *rgstTaskTimes);

    HRESULT GetNextRunTime(
            [out]  SYSTEMTIME *pstNextRun);

    HRESULT SetIdleWait(
            [in]  WORD wIdleMinutes,
            [in]  WORD wDeadlineMinutes);

    HRESULT GetIdleWait(
            [out]  WORD *pwIdleMinutes,
            [out]  WORD *pwDeadlineMinutes);

    HRESULT Run();

    HRESULT Terminate();

    HRESULT EditWorkItem(
            [in]  HWND hParent,
            [in]  DWORD dwReserved);

    HRESULT GetMostRecentRunTime(
            [out]  SYSTEMTIME *pstLastRun);

    HRESULT GetStatus(
            [out]  HRESULT *phrStatus);

    HRESULT GetExitCode(
            [out]  DWORD *pdwExitCode);

    HRESULT SetComment(
            [in]  LPCWSTR pwszComment);

    HRESULT GetComment(
            [out]  LPWSTR *ppwszComment);

    HRESULT SetCreator(
            LPCWSTR pwszCreator);

    HRESULT GetCreator(
            [out]  LPWSTR *ppwszCreator);

    HRESULT SetWorkItemData(
            [in]  WORD cBytes,
            [in]  BYTE rgbData[]);

    HRESULT GetWorkItemData(
            [out]  WORD *pcBytes,
            [out]  BYTE **ppBytes);

    HRESULT SetErrorRetryCount(
            WORD wRetryCount);

    HRESULT GetErrorRetryCount(
            [out]  WORD *pwRetryCount);

    HRESULT SetErrorRetryInterval(
            WORD wRetryInterval);

    HRESULT GetErrorRetryInterval(
            [out]  WORD *pwRetryInterval);

    HRESULT SetFlags(
            DWORD dwFlags);

    HRESULT GetFlags(
            [out]  DWORD *pdwFlags);

    HRESULT SetAccountInformation(
            [in]  LPCWSTR pwszAccountName,
            [in]  LPCWSTR pwszPassword);

    HRESULT GetAccountInformation(
            [out]  LPWSTR *ppwszAccountName);
}

[
    local,
    object,
    uuid(148BD524-A2AB-11CE-B11F-00AA00530503),
    pointer_default(unique)
]
interface ITask : IScheduledWorkItem
{
    HRESULT SetApplicationName(
            [in]  LPCWSTR pwszApplicationName);

    HRESULT GetApplicationName(
            [out]  LPWSTR *ppwszApplicationName);

    HRESULT SetParameters(
            [in]  LPCWSTR pwszParameters);

    HRESULT GetParameters(
            [out]  LPWSTR *ppwszParameters);

    HRESULT SetWorkingDirectory(
            [in]  LPCWSTR pwszWorkingDirectory);

    HRESULT GetWorkingDirectory(
            [in]  LPWSTR *ppwszWorkingDirectory);

    HRESULT SetPriority(
            [in]  DWORD dwPriority);

    HRESULT GetPriority(
            [out]  DWORD *pdwPriority);

    HRESULT SetTaskFlags(
            [in]  DWORD dwFlags);

    HRESULT GetTaskFlags(
            [out]  DWORD *pdwFlags);

    HRESULT SetMaxRunTime(
            [in]  DWORD dwMaxRunTime);

    HRESULT GetMaxRunTime(
            [out]  DWORD *pdwMaxRunTime);
}

[
    local,
    object,
    uuid(148BD527-A2AB-11CE-B11F-00AA00530503),
    pointer_default(unique)
]
interface ITaskScheduler : IUnknown
{
    HRESULT SetTargetComputer(
            [in]  LPCWSTR pwszComputer);

    HRESULT GetTargetComputer(
            [out]  LPWSTR *ppwszComputer);

    HRESULT Enum(
            [out]  IEnumWorkItems **ppEnumTasks);

    HRESULT Activate(
            [in]   LPCWSTR pwszName,
            [in]   REFIID riid,
            [out]  IUnknown **ppunk);

    HRESULT Delete(
            [in]  LPCWSTR pwszName);

    HRESULT NewWorkItem(
            [in]   LPCWSTR pwszTaskName,
            [in]   REFCLSID rclsid,
            [in]   REFIID riid,
            [out]  IUnknown **ppunk);

    HRESULT AddWorkItem(
            [in]  LPCWSTR pwszTaskName,
            [in]  IScheduledWorkItem *pWorkItem);

    HRESULT IsOfType(
            [in]  LPCWSTR pwszName,
            [in]  REFIID riid);
}

[
    uuid(148BD52A-A2AB-11CE-B11F-00AA00530503)
]
coclass CTaskScheduler
{
    [default] interface ITaskScheduler;
};


[
    uuid(148BD520-A2AB-11CE-B11F-00AA00530503)
]
coclass CTask
{
    [default] interface ITask;
};
