package com.omixlab.lckcontrol.shared;

import com.omixlab.lckcontrol.shared.ConnectedClientInfo;
import com.omixlab.lckcontrol.shared.LinkedAccount;
import com.omixlab.lckcontrol.shared.StreamPlan;
import com.omixlab.lckcontrol.shared.StreamPlanConfig;
import com.omixlab.lckcontrol.shared.ILckControlCallback;

interface ILckControlService {
    // Auth
    boolean isAuthenticated();
    void login();

    // Accounts
    List<LinkedAccount> getLinkedAccounts();

    // Stream plans
    StreamPlan createStreamPlan(in StreamPlanConfig config);
    StreamPlan createDefaultPlan(String clientName);
    StreamPlan prepareStreamPlan(String planId);
    List<StreamPlan> getStreamPlans();
    StreamPlan getStreamPlan(String planId);
    boolean startStreamPlan(String planId);
    boolean endStreamPlan(String planId);

    // Clients
    String registerClient(String clientName, String packageName);
    void unregisterClient(String clientId);
    void setClientActivePlan(String clientId, String planId);
    List<ConnectedClientInfo> getConnectedClients();

    // Callbacks
    void registerCallback(ILckControlCallback callback);
    void unregisterCallback(ILckControlCallback callback);
}
