# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

from mozperftest.layers import Layer
from mozperftest.system.binarysetup import get_app_setup


class VersionProducer(Layer):
    """Determines the version of a given application."""

    name = "version-producer"
    activated = True
    arguments = {}

    def __init__(self, env, mach_cmd):
        super().__init__(env, mach_cmd)
        self.env = env
        self.mach_cmd = mach_cmd

    def setup(self):
        pass

    def teardown(self):
        pass

    def run(self, metadata):
        binary = metadata.binary
        if not binary:
            return metadata

        app = self.get_arg("app")
        app_setup = get_app_setup(app)
        if app_setup is None:
            self.warning(f"Unknown app {app} for binary setup.")
            return metadata

        setup_obj = app_setup(app, self)
        metadata.binary_version = setup_obj.get_binary_version(
            binary, apk_path=self.get_arg("android-install-apk")
        )
        return metadata
