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

# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.

from fenrirscreenreader.core import debug
import re, string

class textManager():
    def __init__(self):
        # https://regex101.com/
        self.regExSingle = re.compile(r'(([^\w\s])\2{5,})')
        self.regExDouble = re.compile(r'([^\w\s]{2,}){5,}')  
    def initialize(self, environment):
        self.env = environment  
    def shutdown(self):
        pass    

    def replaceHeadLines(self, text):
        # fast len check for bigger typing echo
        if len(text) < 5:
            return text
        # more strong check, to not match if not needed:
        if len(text.strip(string.ascii_letters+string.digits+string.whitespace)) < 5:
            return text        
        result = ''
        newText = ''
        lastPos = 0
        for match in self.regExDouble.finditer(text):
            span = match.span()
            newText += text[lastPos:span[0]]
            numberOfChars = len(text[span[0]:span[1]])
            name = text[span[0]:span[1]][:2]
            if not self.env['runtime']['punctuationManager'].isPuctuation(name[0]):  
                lastPos = span[1]
                continue          
            if name[0] == name[1]:
                newText += ' ' + str(numberOfChars) + ' ' + self.env['runtime']['punctuationManager'].proceedPunctuation(name[0], True) + ' '
            else:
                newText += ' ' + str(int(numberOfChars / 2)) + ' ' + self.env['runtime']['punctuationManager'].proceedPunctuation(name, True) + ' '
            lastPos = span[1]
        if lastPos != 0:
            newText += ' '
        newText += text[lastPos:]
        lastPos = 0     
        for match in self.regExSingle.finditer(newText):
            span = match.span()         
            result += text[lastPos:span[0]]
            numberOfChars = len(newText[span[0]:span[1]])
            name = newText[span[0]:span[1]][:2]
            if not self.env['runtime']['punctuationManager'].isPuctuation(name[0]):  
                lastPos = span[1]            
                continue               
            if name[0] == name[1]:
                result += ' ' + str(numberOfChars) + ' ' + self.env['runtime']['punctuationManager'].proceedPunctuation(name[0], True) + ' '
            else:
                result += ' ' + str(int(numberOfChars / 2)) + ' ' + self.env['runtime']['punctuationManager'].proceedPunctuation(name, True) + ' '
            lastPos = span[1]
        if lastPos != 0:
            result += ' '                   
        result += newText[lastPos:]
        return result 
