#!/usr/bin/python

from __future__ import absolute_import, print_function, unicode_literals

from sap import *
import time

def connect_disconnect_by_client(sap):

    print("[Test] Connect - Disconnect by client \n")

    try:
        if not sap.isConnected():
           sap.connect()

        if sap.proc_connect():
            if sap.proc_disconnectByClient():
                print("OK")
                return 0

        print("NOT OK")
        return 1

    except BluetoothError as e:
        print("Error " + str(e))


def connect_disconnect_by_server_gracefully(sap, timeout=0):

    print("[Test] Connect - Disconnect by server with timer \n")

    try:
        if not sap.isConnected():
           sap.connect()

        if sap.proc_connect():
            if sap.proc_disconnectByServer(timeout):
                print("OK")
                return 0

        print("NOT OK")
        return 1

    except BluetoothError as e:
        print("Error " + str(e))


def connect_txAPDU_disconnect_by_client(sap):

    print("[Test] Connect - TX APDU - Disconnect by client \n")

    try:
        if not sap.isConnected():
           sap.connect()

        if sap.proc_connect():
            if not sap.proc_transferAPDU():
                print("NOT OK 1")
                return 1

            if not sap.proc_transferAPDU():
                print("NOT OK 2")
                return 1

            if not sap.proc_transferAPDU():
                print("NOT OK 3")
                return 1

            if not sap.proc_transferAPDU():
                print("NOT OK 4")
                return 1

            if sap.proc_disconnectByClient():
                print("OK")
                return 0

        print("NOT OK")
        return 1

    except BluetoothError as e:
        print("Error " + str(e))

def connect_rfcomm_only_and_wait_for_close_by_server(sap):

    print("[Test] Connect rfcomm only  - Disconnect by server timeout \n")

    if not sap.isConnected():
       sap.connect()

    time.sleep(40)
    print("OK")

def power_sim_off_on(sap):

    print("[Test] Powe sim off \n")

    try:
        if not sap.isConnected():
           sap.connect()

        if sap.proc_connect():
            if not sap.proc_resetSim():
                print("NOT OK")
                return 1

            if not sap.proc_powerSimOff():
                print("NOT OK")
                return 1

            if not sap.proc_powerSimOn():
                print("NOT OK")
                return 1

            if sap.proc_disconnectByClient():
                print("OK")
                return 0

        print("NOT OK")
        return 1

    except BluetoothError as e:
        print("Error " + str(e))


if __name__ == "__main__":

    host = "00:00:00:00:00:0"  # server bd_addr
    port = 8  # sap server port

    try:
        s = SAPClient(host, port)
    except BluetoothError as e:
        print("Error " + str(e))

    connect_disconnect_by_client(s)
    connect_disconnect_by_server_gracefully(s)
    connect_disconnect_by_server_gracefully(s, 40)  #  wait 40 sec for srv to close rfcomm sock
    connect_rfcomm_only_and_wait_for_close_by_server(s)
    connect_txAPDU_disconnect_by_client(s)
    power_sim_off_on(s)
