import re, json, sys, pathlib

ROOT = pathlib.Path(__file__).resolve().parents[3]

def parse_erp():
    src = (ROOT/'apps/erp/src/router/index.js').read_text()
    out = []
    # match route objects: path: '...', name: '...', component: import('...'), meta: {...}
    for m in re.finditer(r"path:\s*'([^']*)',\s*\n\s*name:\s*'([^']*)',\s*\n\s*component:\s*\(\)\s*=>\s*import\('([^']+)'\),?\s*\n?\s*(meta:\s*\{([^}]*)\})?", src):
        path, name, comp, _, meta = m.groups()
        meta = meta or ''
        def field(k):
            mm = re.search(k+r":\s*'([^']*)'", meta)
            return mm.group(1) if mm else ''
        out.append({
            'app':'erp','path':path,'name':name,'component':comp,
            'title':field('title'),'module':field('module'),'perm':field('perm'),
            'public':'public: true' in meta,
            'layout':'DefaultLayout' if 'DefaultLayout' not in comp else 'DefaultLayout',
        })
    return out

def parse_pos():
    src = (ROOT/'apps/pos/src/router/index.js').read_text()
    out=[]
    for m in re.finditer(r"path:\s*'([^']*)'[^}]*?name:\s*'([^']*)'[^}]*?component:\s*\(\)\s*=>\s*import\('([^']+)'\)(?:[^}]*?meta:\s*\{([^}]*)\})?", src, re.S):
        path,name,comp,meta = m.groups(); meta=meta or ''
        def field(k):
            mm=re.search(k+r":\s*'([^']*)'",meta); return mm.group(1) if mm else ''
        out.append({'app':'pos','path':path,'name':name,'component':comp,'title':field('title'),
                    'module':field('module'),'perm':field('perm'),'public':'public: true' in meta,'layout':''})
    return out

def parse_b2b():
    base=ROOT/'apps/b2b/app/pages'
    out=[]
    for f in sorted(base.rglob('*.vue')):
        rel=f.relative_to(base).as_posix()
        route='/'+rel[:-4]
        route=route.replace('/index','')
        if route=='': route='/'
        # detect middleware / definePageMeta
        txt=f.read_text()
        mw=re.findall(r"middleware:\s*(\[[^\]]*\]|'[^']*')", txt)
        name=re.search(r"name:\s*'([^']*)'", txt)
        out.append({'app':'b2b','path':route,'name':name.group(1) if name else '',
                    'component':'app/pages/'+rel,'title':'','module':'',
                    'perm':'','public':'false','layout':'','middleware':'; '.join(mw)})
    return out

if __name__=='__main__':
    data={'erp':parse_erp(),'pos':parse_pos(),'b2b':parse_b2b()}
    (ROOT/'docs/audit/raw/ui_routes.json').write_text(json.dumps(data,indent=1))
    for k,v in data.items(): print(k,len(v))
