import os, re

def generateLinksFile():
    os.system('php artisan route:list > routes.txt')
    with open('routes.txt', 'r', encoding='utf-8') as file:
        lines = file.readlines()
    with open('routes.txt', 'w', encoding='utf-8') as file:
        for line in lines:
            if 'Showing' in line and 'routes' in line:
                continue
            if line.strip() == '':
                continue
            file.write(line.strip() + '\n')

def main():
    generateLinksFile()
    formated_lines = []
    public_lines = []
    auth_lines = []
    with open('routes.txt', 'r', encoding='utf-8') as file:
        lines = file.readlines()
    for i in range(len(lines)):
        lines[i] = lines[i].strip()
        if(lines[i] == ''):
            continue

        if len(lines[i].split('. ')) < 2:
            continue

        controller = ""
        if len(lines[i].split('. ')[1].split('›')) > 1:
            controller = lines[i].split('. ')[1].split(' › ')[1].strip()


        line = {
            'type': lines[i].split(' .')[0].split(' ')[0].strip().replace('|', '\\/').strip(),
            'route': lines[i].split(' .')[0].split(' ')[-1:][0].strip().replace('{', '\\{'),
            'params': " / ".join(re.findall(r"\{(.*?)\}", lines[i].split('. ')[0].strip().split(' ')[-2:][0])),
            'name': lines[i].split('. ')[1].split(' › ')[0].strip(),
            'controller': controller.strip()
        }

        if 'publicPage' in lines[i]:
            public_lines.append(line)
            continue
        if 'auth' in lines[i]:
            auth_lines.append(line)
            continue
        formated_lines.append(line)
    header = "| Type | Route | Params | Name | Controller |\n|------|-------|--------|------|------------|"
    formated_lines.insert(0, header)
    for i in range(1, len(formated_lines)):
        formated_lines[i] = f"| {formated_lines[i]['type']} | {formated_lines[i]['route']} | {formated_lines[i]['params']} | {formated_lines[i]['name']} | {formated_lines[i]['controller']} |"

    public_lines.insert(0, header)
    for i in range(1, len(public_lines)):
        public_lines[i] = f"| {public_lines[i]['type']} | {public_lines[i]['route']} | {public_lines[i]['params']} | {public_lines[i]['name']} | {public_lines[i]['controller']} |"
    auth_lines.insert(0, header)
    for i in range(1, len(auth_lines)):
        auth_lines[i] = f"| {auth_lines[i]['type']} | {auth_lines[i]['route']} | {auth_lines[i]['params']} | {auth_lines[i]['name']} | {auth_lines[i]['controller']} |"



    with open('output.txt', 'w', encoding='utf-8') as file:
        file.write('## Rotas Autenticadas\n')
        file.write('\n'.join(formated_lines))
        file.write('\n\n')
        file.write('## Rotas Públicas\n')
        file.write('\n'.join(public_lines))
        file.write('\n\n')
        file.write('## Rotas de autenticação\n')
        file.write('\n'.join(auth_lines))
    os.remove('routes.txt')


if __name__ == "__main__":
    main()

