#!/usr/bin/env python

"""
Runs flake8 over Python files which contain a marker indicating
they are clean, ensures that they actually are

 AP_FLAKE8_CLEAN
"""

import os
import subprocess
import sys

import argparse

os.environ['PYTHONUNBUFFERED'] = '1'


class Flake8Checker(object):
    def __init__(self):
        self.retcode = 0
        self.files_to_check = []

    def progress(self, string):
        print("****** %s" % (string,))

    def check(self):
        if len(self.files_to_check) == 0:
            return
        for path in self.files_to_check:
            self.progress("Checking (%s)" % path)
        ret = subprocess.run(["flake8", "--show-source"] + self.files_to_check,
                             stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
        if ret.returncode != 0:
            self.progress("Flake8 check failed: (%s)" % (ret.stdout))
            self.retcode = 1

    def run(self):
        for (dirpath, dirnames, filenames) in os.walk("Tools"):
            for filename in filenames:
                if os.path.splitext(filename)[1] != ".py":
                    continue
                filepath = os.path.join(dirpath, filename)
                content = open(filepath).read()
                if "AP_FLAKE8_CLEAN" not in content:
                    continue
                self.files_to_check.append(filepath)
        self.check()
        return self.retcode


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Check all Python files for flake8 cleanliness')
    # parser.add_argument('--build', action='store_true', default=False, help='build as well as configure')
    args = parser.parse_args()

    checker = Flake8Checker()
    sys.exit(checker.run())