#!/usr/bin/env python3
"""SkyZ Files: automatische echte Dokumentordner. sudo python3 DATEI.py"""
import ast,base64,datetime,json,os,shutil,sqlite3,subprocess,tempfile,zlib
from pathlib import Path
ROOT=Path('/data/skyzfiles')
PAYLOAD='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'

def replace_once(text,old,new):
    if text.count(old)!=1:raise RuntimeError('Unbekannte Codeversion; Abbruch bei: '+old[:90])
    return text.replace(old,new,1)

def patch_files(app,assets):
    if not (app/'vault/routing.py').exists():raise RuntimeError('Bitte zuerst das SkyZFiles-Ordner-Update installieren.')
    changes=dict(assets);model=changes.pop('_model')
    models=(app/'vault/models.py').read_text()
    if 'class ShareLink(' not in models:models+='\n'+model
    changes['vault/models.py']=models
    apps=(app/'vault/apps.py').read_text()
    if 'from . import share_signals' not in apps:apps=replace_once(apps,'    def ready(self):','    def ready(self):\n        from . import share_signals')
    changes['vault/apps.py']=apps
    middleware=(app/'vault/middleware.py').read_text()
    if "'/api/public-share'" not in middleware:
        middleware=replace_once(middleware,"'/offline/', '/healthz')", "'/offline/', '/healthz', '/s/', '/api/public-share')")
        middleware=replace_once(middleware,"        response['Permissions-Policy']", "        if path in ('/s/', '/api/public-share'):\n            response['Referrer-Policy'] = 'no-referrer'\n            response['X-Robots-Tag'] = 'noindex, nofollow'\n        response['Permissions-Policy']")
    changes['vault/middleware.py']=middleware
    urls=(app/'config/urls.py').read_text()
    if 'from vault import shares,folder_browser' not in urls:
        urls=replace_once(urls,'from vault import views','from vault import views\nfrom vault import shares,folder_browser')
        urls=replace_once(urls,'urlpatterns=[',"urlpatterns=[\n path('folders/',folder_browser.page),\n path('api/folder-browser',folder_browser.browse),\n path('shares/',shares.manager),\n path('api/shares',shares.manage),\n path('s/',shares.public_page),\n path('api/public-share',shares.public_api),")
    changes['config/urls.py']=urls
    html=(app/'templates/app.html').read_text()
    if 'href="/folders/"' not in html:
        html=replace_once(html,'<nav class="mainnav" aria-label="Archiv">','<nav class="mainnav" aria-label="Archiv"><a class="navitem" href="/folders/"><svg><use href="#i-file"/></svg><span>Ordner</span></a><a class="navitem" href="/shares/"><svg><use href="#i-arrow"/></svg><span>Freigaben</span></a>')
    changes['templates/app.html']=html
    js=(app/'static/app.js').read_text()
    if 'Link teilen</a>' not in js:
        js=replace_once(js,' <div class="actions"><a class="secondary"', ' <div class="actions">${!d.deleted?`<a class="secondary" href="/shares/?document=${d.id}">Link teilen</a>`:\'\'}<a class="secondary"')
        js+='\nconst deepLinkDocument=new URLSearchParams(location.search).get("document");\nif(deepLinkDocument&&/^[0-9a-fA-F-]{36}$/.test(deepLinkDocument))openDocument(deepLinkDocument);\n'
    changes['static/app.js']=js
    for name,text in changes.items():
        if (app/name).is_symlink():raise RuntimeError('Unerwarteter Symlink: '+name)
        if name.endswith('.py'):ast.parse(text)
    return changes

def atomic_write(p,data):
    fd,name=tempfile.mkstemp(prefix='.shares-update-',dir=p.parent)
    try:
        with os.fdopen(fd,'wb') as f:f.write(data);f.flush();os.fsync(f.fileno())
        os.chmod(name,0o644);os.replace(name,p)
    finally:Path(name).unlink(missing_ok=True)

def main():
    if os.geteuid()!=0:raise SystemExit('Bitte sudo python3 verwenden.')
    os.umask(0o022);app=ROOT/'app';python=ROOT/'venv/bin/python';db=ROOT/'state/db.sqlite3'
    if not python.is_file() or not db.is_file() or db.is_symlink():raise SystemExit('Vorhandene SkyZ-Installation unter /data/skyzfiles fehlt.')
    migrations={p.name for p in (app/'vault/migrations').glob('*.py')}
    if migrations-{'__init__.py','0001_initial.py','0002_folder_assignment.py','0003_share_link.py'}:raise SystemExit('Zusätzliche Datenbankmigrationen gefunden; Version zuerst prüfen.')
    assets=json.loads(zlib.decompress(base64.b64decode(PAYLOAD)))
    changes=patch_files(app,assets)
    backup=ROOT/'config'/('shares-backup-'+datetime.datetime.now().strftime('%Y%m%d-%H%M%S-%f'));backup.mkdir(mode=0o700)
    originals={name:(app/name).read_bytes() if (app/name).exists() else None for name in changes}
    for name,data in originals.items():
        if data is not None:
            dest=backup/name;dest.parent.mkdir(parents=True,exist_ok=True);shutil.copy2(app/name,dest)
    active=[s for s in ['skyzfiles-web','skyzfiles-worker','skyzfiles-sftp'] if subprocess.run(['systemctl','is-active','--quiet',s]).returncode==0]
    manage=['runuser','-u','skyzfiles','--',str(python),str(app/'manage.py')]
    saved_db=False
    try:
        if active:
            print('Dienste werden für die Datenbanksicherung und Aktualisierung kurz gestoppt.',flush=True)
            subprocess.run(['systemctl','stop',*active],check=True)
        with sqlite3.connect(db) as source,sqlite3.connect(backup/'db.sqlite3') as dest:source.backup(dest)
        saved_db=True
        for name,text in changes.items():atomic_write(app/name,text.encode())
        subprocess.run(manage+['check'],check=True)
        subprocess.run(manage+['migrate','--noinput'],check=True)
        subprocess.run(manage+['collectstatic','--noinput'],check=True)
    except Exception:
        if saved_db:
            for name,data in originals.items():
                if data is None:(app/name).unlink(missing_ok=True)
                else:shutil.copy2(backup/name,app/name)
            with sqlite3.connect(backup/'db.sqlite3') as source,sqlite3.connect(db) as dest:source.backup(dest)
            subprocess.run(manage+['collectstatic','--noinput'],check=False)
            print('Update fehlgeschlagen; Code und Datenbank wiederhergestellt. Sicherung:',backup)
        raise
    finally:
        if active:subprocess.run(['systemctl','start',*active],check=True)
    print('Ordneransicht und Freigabelinks installiert. Sicherung:',backup)
    print('WebApp neu laden: Kategorien Ordner und Freigaben. Dokument öffnen → Link teilen.')
    print('Anleitung: /data/skyzfiles/app/FREIGABEN.md')

if __name__=='__main__':main()
