package org.sflphone.service;

import org.sflphone.model.SipCall;
import org.sflphone.model.Conference;
import org.sflphone.model.SipMessage;

interface ISipService {
    
    Map getCallDetails(in String callID);
    void placeCall(in SipCall call);
    void refuse(in String callID);
    void accept(in String callID);
    void hangUp(in String callID);
    void hold(in String callID);
    void unhold(in String callID);
    
    List getAccountList();
    String addAccount(in Map accountDetails);
    void removeAccount(in String accoundId);
    void setAccountOrder(in String order);
    Map getAccountDetails(in String accountID);
    Map getAccountTemplate();
    void registerAllAccounts();
    void setAccountDetails(in String accountId, in Map accountDetails);
    List getCredentials(in String accountID);
    void setCredentials(in String accountID, in List creds);
    void setAudioPlugin(in String callID);
    String getCurrentAudioOutputPlugin();
    List getAudioCodecList(in String accountID);
    String getCurrentAudioCodecName(in String callID);
    void setActiveCodecList(in List codecs, in String accountID);
    Map getRingtoneList();
    
    
    // FIXME
    void toggleSpeakerPhone(in boolean toggle);

    /* Notification */
    void createNotification();
    void destroyNotification();

    /* Recording */
    void setRecordPath(in String path);
    String getRecordPath();
    boolean toggleRecordingCall(in String id);
    boolean startRecordedFilePlayback(in String filepath);
	void stopRecordedFilePlayback(in String filepath);
	
	/* Mute */
	void setMuted(boolean mute);
    boolean isCaptureMuted();

    /* Security */
    void confirmSAS(in String callID);

	/* DTMF */
	void playDtmf(in String key);
    
    /* IM */
    void sendTextMessage(in String callID, in SipMessage message);
        
    void transfer(in String callID, in String to);
    void attendedTransfer(in String transferID, in String targetID);
    
    /* Conference related methods */

    void removeConference(in String confID);
    void joinParticipant(in String sel_callID, in String drag_callID);

    void addParticipant(in SipCall call, in String confID);
    void addMainParticipant(in String confID);
    void detachParticipant(in String callID);
    void joinConference(in String sel_confID, in String drag_confID);
    void hangUpConference(in String confID);
    void holdConference(in String confID);
    void unholdConference(in String confID);
    boolean isConferenceParticipant(in String callID);
    Map getConferenceList();
    List getParticipantList(in String confID);
    String getConferenceId(in String callID);
    String getConferenceDetails(in String callID);
    
    Conference getCurrentCall();
    List getConcurrentCalls();

    Conference getConference(in String id);

}
