#!/usr/bin/env python2
# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Parse the output of 'huddly-updater --info --log_to=stdout'.
"""

from __future__ import print_function

TOKEN_FW_CHUNK_HEADER = 'Firmware package:'
TOKEN_PERIPHERAL_CHUNK_HEADER = 'Camera Peripheral:'
TOKEN_BOOT = 'bootloader:'
TOKEN_APP = 'app:'
TOKEN_REV = 'hw_rev:'


def parse_fw_vers(chunk):
    """Parse huddly-updater command output.

    The parser logic heavily depends on the output format.

    @param chunk: The huddly-updater output. See CHUNK_FILENAME for example.

    @returns a dictionary containing the version strings
            for the firmware package and for the peripheral.
    """
    dic = {}
    target = ''
    for line in chunk.split('\n'):
        if TOKEN_FW_CHUNK_HEADER in line:
            target = 'package'
            dic[target] = {}
            continue
        elif TOKEN_PERIPHERAL_CHUNK_HEADER in line:
            target = 'peripheral'
            dic[target] = {}
            continue

        if not target:
            continue

        fields = line.split(':')
        if fields.__len__() < 2:
            continue

        val = fields[1].strip()

        if TOKEN_BOOT in line:
            dic[target]['boot'] = val
        elif TOKEN_APP in line:
            dic[target]['app'] = val
        elif TOKEN_REV in line:
            dic[target]['hw_rev'] = val
        else:
            continue

    return dic
