# Mobile Verification Toolkit (MVT)
# Copyright (c) 2021 MVT Project Developers.
# See the file 'LICENSE' for usage and copying permissions, or find a copy at
#   https://github.com/mvt-project/mvt/blob/main/LICENSE

import logging

from .base import AndroidExtraction

log = logging.getLogger(__name__)

class Processes(AndroidExtraction):
    """This module extracts details on running processes."""

    def __init__(self, file_path=None, base_folder=None, output_folder=None,
                 fast_mode=False, log=None, results=[]):
        super().__init__(file_path=file_path, base_folder=base_folder,
                         output_folder=output_folder, fast_mode=fast_mode,
                         log=log, results=results)

    def run(self):
        self._adb_connect()

        output = self._adb_command("ps")

        for line in output.split("\n")[1:]:
            line = line.strip()
            if line == "":
                continue

            fields = line.split()
            proc = dict(
                user=fields[0],
                pid=fields[1],
                parent_pid=fields[2],
                vsize=fields[3],
                rss=fields[4],
            )

            # Sometimes WCHAN is empty, so we need to re-align output fields.
            if len(fields) == 8:
                proc["wchan"] = ""
                proc["pc"] = fields[5]
                proc["name"] = fields[7]
            elif len(fields) == 9:
                proc["wchan"] = fields[5]
                proc["pc"] = fields[6]
                proc["name"] = fields[8]

            self.results.append(proc)

        self._adb_disconnect()

        log.info("Extracted records on a total of %d processes", len(self.results))
