package org.wso2.carbon.device.mgt.mobile.impl.ios.dao;

import org.wso2.carbon.device.mgt.common.PaginationRequest;
import org.wso2.carbon.device.mgt.ios.payload.beans.DeviceProfile;
import org.wso2.carbon.device.mgt.mobile.impl.ios.dto.DEPDevice;
import org.wso2.carbon.device.mgt.mobile.impl.ios.dto.DEPProfile;

import java.util.List;

public interface ProfileDAO {
    boolean addProfile(DeviceProfile deviceProfile) throws
            MobileDeviceManagementDAOException;

    DeviceProfile getProfile(String deviceId, String url) throws MobileDeviceManagementDAOException;

    DEPProfile getDEPProfile(String uuid) throws MobileDeviceManagementDAOException;

    List<DEPProfile> getDEPProfiles(PaginationRequest request) throws MobileDeviceManagementDAOException;

    int getDEPProfilesCount() throws MobileDeviceManagementDAOException;

    int addDEPProfile(DEPProfile depProfile) throws MobileDeviceManagementDAOException;

    boolean updateDEPProfile(DEPProfile depProfile) throws MobileDeviceManagementDAOException;

    boolean addDEPDevice(DEPDevice depDevice) throws MobileDeviceManagementDAOException;

    boolean updateDEPDevice(DEPDevice depDevice) throws MobileDeviceManagementDAOException;

    boolean removeDEPDevice(String id) throws MobileDeviceManagementDAOException;

    DEPDevice getDEPDevice(String serial) throws MobileDeviceManagementDAOException;

    List<DEPDevice> getDEPDevices(PaginationRequest request) throws MobileDeviceManagementDAOException;

    int getDEPDevicesCount() throws MobileDeviceManagementDAOException;

    DEPDevice getDEPDeviceByDeviceId(String serial) throws MobileDeviceManagementDAOException;

    void updateDeviceUser(String serial, String username, boolean requireBasicAuth, boolean requireAgentInstall)
            throws MobileDeviceManagementDAOException;

    void assignProfileToDevice(String profileId, String serial)
            throws MobileDeviceManagementDAOException;

    void removeProfileToDeviceAssignment(String serial) throws MobileDeviceManagementDAOException;
}
