# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from typing import Iterator, List, Optional
from difl.changes import ClassifiedChange
from difl.ir import Declaration

import json
import sys


def tricium_output(abi_changes: Iterator[ClassifiedChange]):
    '''
    Generates output to match the Message proto in:
    https://chromium.googlesource.com/infra/infra/+/refs/heads/master/go/src/infra/tricium/api/v1/data.proto#135
    '''

    messages: List[dict] = []

    for change in abi_changes:
        message: dict = {
                'category': 'difl/abi-hard' if change.hard else 'difl/abi-soft',
                'message': change.message,
        }
        declaration: Optional[Declaration] = change.change.after
        if declaration is not None:
            message['path'] = declaration.filename
            message['start_line'] = declaration.line
            message['end_line'] = declaration.line
        messages.append(message)

    json.dump(messages, sys.stdout, indent=True)
