# -*- 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"))
