import os
import time
import json

from celilo.Adb import Adb
from celilo.reporting.StreamReportGenerator import StreamReportGenerator
from celilo.reporting.message_transmission_report import get_android_devices


class StreamTestController:

    def __init__(self, test_start_time, duration_minutes, package, workspace_id, config_file_location, key, workspace_name):
        self.test_start_time = test_start_time
        self.duration_minutes = duration_minutes
        self.package = package
        self.workspace_id = workspace_id,
        self.config_file_location = config_file_location
        self.config = self.load_config(config_file_location)
        self.workspace_key = key
        self.workspace_name = workspace_name
        pass

    def start(self):
        print(f"Starting ATAK Stream test at {self.test_start_time}")
        print(f"Duration: {self.duration_minutes} minutes")

        adb = Adb(package=self.package)

        devices = adb.devices()
        workspace_id = self.workspace_id[0]
        workspace_key = self.workspace_key
        workspace_name = self.workspace_name
        print(f"Starting for Workspace ID: {workspace_id}")
        print(f"Workspace Key: {workspace_key}")

        adb.start_app(self.package, devices, workspace_id, self.config, workspace_key, workspace_name)

        time.sleep(self.duration_minutes * 60)

        print(f"Stream test complete at {time.time()}")

        if self.package == "com.atakmap.app.civ":
            print("Testing ATAK")
            atak_kill_script = "../cli/atak_kill.sh"
            os.system(f"sh {atak_kill_script}")
        else:
            print("Testing Test App")
            test_app_kill_script = "../cli/test_app_kill.sh"
            os.system(f"sh {test_app_kill_script}")

    def load_config(self, config_file_location):
        with open(config_file_location, 'r') as file:
            self.config_data = json.load(file)
        return self.config_data
