#!/usr/bin/env python2
# -*- coding: utf-8 -*-
""" titlemd """

from __future__ import print_function

import argparse
import sys

try:
    from titlecase import titlecase
except ImportError:
    print("Please install titlecase")

def arg_parse():
    """
    argument parser
    """
    parser = argparse.ArgumentParser(
        description="Titlemd"
    )
    parser.add_argument('-t', '--test',
                        action='store_true',
                        help="test")
    parser.add_argument('location',
                        nargs='?',
                        default='.',
                        help="location, default current directory")
    return parser.parse_args()

def mkdocs_available(location):
    """ Is mkdocs.yml available? """
    if location.find("mkdocs.yml") != -1:
        return True
    return False

def linestart(line, disabled, test, prev_line=None):
    """ linestart """
    if test:
        if (line.startswith("``") or line.startswith("extra:")) and not disabled:
            return True
        if (line.startswith("``") or prev_line.startswith("pages:")) and disabled:
            return False
    else:
        if line.startswith("``") and not disabled:
            return True
        if line.startswith("``") and disabled:
            return False
    return disabled

def testdata(arg):
    """ test """
    # Spelling exceptions
    with open('.spelling') as fdata:
        spelling = fdata.readlines()

    # pylint: disable=unused-argument,inconsistent-return-statements
    def abbreviations(word, **kwargs):
        """ abbreviations """
        if word+"\n" in spelling:
            return word

    # Open the file and read the lines as a list
    with open(arg.location) as fdata:
        lines = fdata.readlines()

    # Loop through the list of lines and titlecase
    # any line beginning with '#'.
    return_value = 0
    prev_line = lines[0]
    echo_filename = False
    disabled = mkdocs_available(arg.location)
    for line in lines:
        disabled = linestart(line, disabled, arg.test, prev_line)
        if line.startswith('#') and not disabled and not mkdocs_available(arg.location):
            if line != titlecase(line[:(line.find("]"))],
                                 callback=abbreviations)+line[(line.find("]")):]:
                if return_value == 0 and not echo_filename:
                    print("%s" % arg.location)
                    echo_filename = True
                print("-"+line, end="")
                print("+"+titlecase(line[:(line.find("]"))],
                                    callback=abbreviations)+line[(line.find("]")):], end="")
                print()
                return_value = 1
        if (line.startswith('---') or line.startswith('===')) and not disabled:
            if prev_line != titlecase(prev_line[:(prev_line.find("]"))],
                                      callback=abbreviations)+prev_line[(prev_line.find("]")):]:
                if return_value == 0 and not echo_filename:
                    print("%s" % arg.location)
                    echo_filename = True
                print("-"+prev_line, end="")
                print("+"+titlecase(prev_line[:(prev_line.find("]"))],
                                    callback=abbreviations)+prev_line[(prev_line.find("]")):],
                      end="")
                print()
                return_value = 1
        if (mkdocs_available(arg.location) and not line.startswith('#') and not disabled):
            if line != titlecase(line[:(line.find(":"))],
                                 callback=abbreviations)+line[(line.find(":")):]:
                if return_value == 0 and not echo_filename:
                    print("%s" % arg.location)
                    echo_filename = True
                print("-"+line, end="")
                print("+"+titlecase(line[:(line.find(":"))],
                                    callback=abbreviations)+line[(line.find(":")):], end="")
                print()
                return_value = 1
            prev_line = line
    return return_value

def writedata(arg):
    """ writedata """
    # Spelling exceptions
    with open('.spelling') as fdata:
        spelling = fdata.readlines()

    # pylint: disable=unused-argument,inconsistent-return-statements
    def abbreviations(word, **kwargs):
        """ abbreviations """
        if word+"\n" in spelling:
            return word

    # Open the file and read the lines as a list
    with open(arg.location) as fdata:
        lines = fdata.readlines()

    with open(arg.location, 'w') as fdata:
        # Loop through the list of lines and titlecase
        # any line beginning with '#'.
        prev_line = lines[0]
        disabled = False
        for line in lines:
            disabled = linestart(line, disabled, arg.test)
            if line.startswith('#') and not disabled:
                line = titlecase(line[:(line.find("]"))],
                                 callback=abbreviations)+line[(line.find("]")):]
            if (line.startswith('---') or line.startswith('===')) and not disabled:
                prev_line = titlecase(prev_line[:(prev_line.find("]"))],
                                      callback=abbreviations)+prev_line[(prev_line.find("]")):]
            fdata.write(prev_line)
            prev_line = line
        fdata.write(prev_line)

def main():
    """
    main function
    """

    arg = arg_parse()

    if arg.test:
        sys.exit(testdata(arg))
    else:
        writedata(arg)

if __name__ == "__main__":
    main()