# -*- Mode: Python; indent-tabs-mode: nil; tab-width: 4; coding: utf-8 -*-

"""apport package hook for update-manager

(c) 2011 Canonical Ltd.
Author: Brian Murray <brian@ubuntu.com>
"""

import os
import re
import subprocess
from apport.hookutils import (
    attach_gsettings_package,
    attach_root_command_outputs,
    attach_file_if_exists,
    command_available,
    recent_syslog,
)


def run_hwe_command(option):
    command = ["hwe-support-status", option]
    sp = subprocess.Popen(
        command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=None
    )
    out = sp.communicate()[0]
    if sp.returncode == 0:
        res = out.strip()
    # exit code is 10 on unsupported HWE
    elif sp.returncode == 10:
        res = out.strip()
    else:
        res = (
            b"Error: command "
            + str(command).encode()
            + b" failed with exit code "
            + str(sp.returncode).encode()
            + b": "
            + out
        )
    return res


def add_info(report, ui):

    problem_type = report.get("ProblemType", None)
    if problem_type == "Bug":
        response = ui.yesno(
            "Is the issue you are reporting one you encountered "
            "when upgrading Ubuntu from one release to another?"
        )
    else:
        response = None
    if response:
        os.execlp("apport-bug", "apport-bug", "ubuntu-release-upgrader")
    else:
        package = report.get("Package", None)
        if package:
            package = package.split(" ")[0]
        if package == "update-manager":
            attach_gsettings_package(report, "update-manager")
        attach_file_if_exists(
            report, "/var/log/apt/history.log", "DpkgHistoryLog.txt"
        )
        attach_file_if_exists(
            report, "/var/log/apt/term.log", "DpkgTerminalLog.txt"
        )
        attach_root_command_outputs(
            report,
            {
                "CurrentDmesg.txt": "dmesg | "
                "comm -13 --nocheck-order /var/log/dmesg -"
            },
        )
        if command_available("hwe-support-status"):
            # not using apport's command_output because it doesn't expect a
            # return code of 10
            unsupported = run_hwe_command("--show-all-unsupported")
            if unsupported:
                report["HWEunsupported"] = unsupported
                report["HWEreplacements"] = run_hwe_command(
                    "--show-replacements"
                )
        report["Aptdaemon"] = recent_syslog(re.compile("AptDaemon"))
