Cleanup Script

"""
Spotfire IronPython cleaner. Deletes CSV/XLSX at Document.Properties['ExportPath'].
"""
import os

def err_out(msg, path):
    print("ERROR: " + msg)
    html = '<table style="border-collapse: collapse; width: 100%; font-family: Arial, sans-serif;">'
    html += '<thead><tr><th style="background-color: white; color: darkgreen; padding: 12px; border: 1px solid #ddd;">File Name</th>'
    html += '<th style="background-color: white; color: darkgreen; padding: 12px; border: 1px solid #ddd;">Extension</th>'
    html += '<th style="background-color: white; color: darkgreen; padding: 12px; border: 1px solid #ddd;">Action / Status</th>'
    html += '<th style="background-color: white; color: darkgreen; padding: 12px; border: 1px solid #ddd;">Detail</th></tr></thead>'
    html += '<tbody><tr><td colspan="4" style="padding: 8px; border: 1px solid #ddd; color: red;">ERROR: %s</td></tr></tbody></table>' % msg
    if 'SpecLogOutput' in globals():
        SpecLogOutput('Export Visualization Contents to folder: ' + path, html)

def CleanExportLocation():
    target = None
    if 'Document' in globals():
        try:
            target = Document.Properties['ExportPath']
        except Exception: pass
    if not target or str(target).strip() == "":
        err_out("ExportPath property is missing or empty.", "[Undefined path]")
        return
    if not os.path.exists(target):
        err_out("Target folder does not exist: " + str(target), str(target))
        return

    print("Cleaning folder: " + str(target))
    html = '<table style="border-collapse: collapse; width: 100%; font-family: Arial, sans-serif;">'
    html += '<thead><tr><th style="background-color: white; color: darkgreen; padding: 12px; border: 1px solid #ddd;">File Name</th>'
    html += '<th style="background-color: white; color: darkgreen; padding: 12px; border: 1px solid #ddd;">Extension</th>'
    html += '<th style="background-color: white; color: darkgreen; padding: 12px; border: 1px solid #ddd;">Action / Status</th>'
    html += '<th style="background-color: white; color: darkgreen; padding: 12px; border: 1px solid #ddd;">Detail</th></tr></thead><tbody>'
   
    try:
        files = os.listdir(target)
    except Exception as ex:
        err_out("Failed to list files: " + str(ex), str(target))
        return

    print("\n--- PRE-CLEANUP SCAN ---")
    del_targets = []
    for f in files:
        fpath = os.path.join(target, f)
        if os.path.isfile(fpath):
            ext = os.path.splitext(f)[1].lower()
            if ext in (".csv", ".xlsx"):
                del_targets.append((f, ext, fpath))
                print("  - " + f + " [TARGETED FOR DELETION]")
            else:
                print("  - " + f + " [SKIPPED]")
                html += '<tr><td style="padding: 8px; border: 1px solid #ddd;">%s</td><td style="padding: 8px; border: 1px solid #ddd;">%s</td><td style="padding: 8px; border: 1px solid #ddd; color: blue;">Skipped</td><td style="padding: 8px; border: 1px solid #ddd;">File preserved</td></tr>' % (f, ext)
        else:
            print("  - " + f + "/ [SKIPPED]")
            html += '<tr><td style="padding: 8px; border: 1px solid #ddd;">%s/</td><td style="padding: 8px; border: 1px solid #ddd;">[Folder]</td><td style="padding: 8px; border: 1px solid #ddd; color: blue;">Skipped</td><td style="padding: 8px; border: 1px solid #ddd;">Directory bypassed</td></tr>' % f
    print("------------------------\n")

    csv_del, xlsx_del, errors = 0, 0, 0
    print("--- DELETIONS ---")
    for f, ext, fpath in del_targets:
        try:
            os.remove(fpath)
            if ext == ".csv": csv_del += 1
            else: xlsx_del += 1
            print("  [DELETED] " + f)
            html += '<tr><td style="padding: 8px; border: 1px solid #ddd;">%s</td><td style="padding: 8px; border: 1px solid #ddd;">%s</td><td style="padding: 8px; border: 1px solid #ddd; color: green;">Deleted</td><td style="padding: 8px; border: 1px solid #ddd;">Removed</td></tr>' % (f, ext)
        except Exception as ex:
            errors += 1
            print("  [ERROR] " + f + ": " + str(ex))
            html += '<tr><td style="padding: 8px; border: 1px solid #ddd; color: red;">%s</td><td style="padding: 8px; border: 1px solid #ddd;">%s</td><td style="padding: 8px; border: 1px solid #ddd; color: red;">Error</td><td style="padding: 8px; border: 1px solid #ddd; color: red;">%s</td></tr>' % (f, ext, str(ex))
   
    html += '</tbody><tfoot><tr><td colspan="4" style="background-color: #f0f0f0; padding: 10px; border: 1px solid #ddd;">'
    html += '<strong>Cleanup Summary:</strong> Checked: %d | Deleted: %d (CSV: %d, XLSX: %d) | Errors: %d</td></tr></tfoot></table>' % (len(files), csv_del + xlsx_del, csv_del, xlsx_del, errors)

    print("\nSUMMARY: Deleted %d files, Errors: %d" % (csv_del + xlsx_del, errors))
   
    if 'SpecLogOutput' in globals():
        SpecLogOutput('Export Visualization Contents to folder: ' + target, html)

CleanExportLocation()