#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Analyzer functions
"""

import re

m_file_name = None
m_text = None

def load_file(file_name):
    """
    Loads a file
    """
    global m_file_name
    global m_text

    with open(file_name, 'r') as f:
        m_text = f.read()

    m_file_name = file_name

def current_file():
    """
    Returns the name of the currently loaded file
    """
    global m_file_name

    if m_file_name is None:
        return "none"
    return m_file_name

def count_lines():
    """
    Counts the number lines
    """
    global m_file_name
    global m_text

    if (m_file_name is None):
        return "ERR: No file loaded"
    
    counter = 0
    lines = m_text.split('\n')
    for line in lines:
        length = len(line)
        if length > 0:
            counter += 1

    return "\nText contains " + str(counter) + " lines."

def count_words():
    """
    Counts the number of words
    """
    global m_file_name
    global m_text

    if (m_file_name is None):
        return "ERR: No file loaded"
    
    counter = 0
    words = re.sub('[^a-z ]', '', m_text.lower()).split(" ")
    for word in words:
        length = len(word)
        if length > 0:
            counter += 1

    return "\nText contains " + str(counter) + " words."

def count_letters():
    """
    Counts the number of letters
    """
    global m_file_name
    global m_text

    if (m_file_name is None):
        return "ERR: No file loaded"

    letters = re.sub('[^a-zA-Z]', '', m_text)

    return "\nText contains " + str(len(letters)) + " letters."

def word_freq():
    """
    Determines the word frequency
    """
    global m_file_name
    global m_text

    if (m_file_name is None):
        return "ERR: No file loaded"

    d = dict()

    words = re.sub('[^a-z ]', '', m_text.lower()).split(" ")

    counter = 0
    for word in words:
        d[word] = d.get(word, 0) + 1
        counter += 1

    return display_freq(d, counter)

def letter_freq():
    """
    Determines the letter frequency
    """
    global m_file_name
    global m_text

    if (m_file_name is None):
        return "ERR: No file loaded"

    d = dict()

    letters = re.sub('[^a-z]', '', m_text.lower())

    counter = 0
    for letter in letters:
        d[letter] = d.get(letter, 0) + 1
        counter += 1

    return display_freq(d, counter)

def display_freq(data, total, rows=7):
    """
    Returns a frequencychart
    """
    result = "\n"
    counter = 0
    while counter <= rows:
        key = None
        value = 0
        for k, v in data.items():
            if v > value:
                key = k
                value = v

        if key is None:
            break

        percent = round(value / total * 100, 2)
        result += key + "\t" + str(percent) + "%\n"
        data.pop(key)
        counter += 1

    return result

def perform_all():
    """
    Performs all analyzations
    """
    result = ""
    result += count_lines() + "\n"
    result += count_words() + "\n"
    result += count_letters() + "\n"
    result += "\nWord frequency:\n"
    result += word_freq()
    result += "\nLetter frequency:\n"
    result += letter_freq()
    return result
