#!/usr/bin/env python3
from __future__ import annotations

import csv
import shutil
from pathlib import Path

BASE = Path('/Users/iggy/.hermes/profiles/ignite_team/outbound/krb-image-grab')
PAGE_DIR = BASE / 'webflow-import-assets' / 'Page images'
MANIFEST = BASE / 'krb-webflow-page-images-import-set.csv'
OUT_MANIFEST = BASE / 'krb-webflow-page-images-import-set-page-folder-names.csv'
BACKUP_MANIFEST = BASE / 'krb-webflow-page-images-import-set.before-remove-page-prefix.csv'


def unique_path(path: Path) -> Path:
    if not path.exists():
        return path
    stem, suffix = path.stem, path.suffix
    i = 2
    while True:
        candidate = path.with_name(f'{stem}__{i}{suffix}')
        if not candidate.exists():
            return candidate
        i += 1


def strip_page_prefix(name: str) -> str:
    return name[len('page__'):] if name.startswith('page__') else name


def main() -> None:
    if not PAGE_DIR.exists():
        raise SystemExit(f'Missing Page images dir: {PAGE_DIR}')
    if not MANIFEST.exists():
        raise SystemExit(f'Missing manifest: {MANIFEST}')
    if not BACKUP_MANIFEST.exists():
        shutil.copy2(MANIFEST, BACKUP_MANIFEST)

    rows = list(csv.DictReader(MANIFEST.open(newline='')))
    renamed = 0
    missing = 0

    for row in rows:
        current = Path(row['download_path'])
        if not current.exists():
            current = PAGE_DIR / row['filename']
        if not current.exists():
            row['rename_status'] = 'missing'
            missing += 1
            continue

        desired_name = strip_page_prefix(current.name)
        target = PAGE_DIR / desired_name
        if current.name == desired_name:
            row['rename_status'] = 'already-no-page-prefix'
        else:
            target = unique_path(target)
            current.rename(target)
            row['rename_status'] = 'removed-page-prefix'
            renamed += 1

        row['filename'] = target.name
        row['download_path'] = str(target)
        row['asset_folder'] = 'Page images'
        if 'page_prefix' not in row or not row.get('page_prefix'):
            row['page_prefix'] = target.name.split('__', 1)[0]

    fieldnames = list(rows[0].keys()) if rows else []
    for extra in ['page_prefix', 'rename_status']:
        if extra not in fieldnames:
            fieldnames.append(extra)
    with OUT_MANIFEST.open('w', newline='') as f:
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(rows)
    shutil.copy2(OUT_MANIFEST, MANIFEST)

    print('DONE')
    print(f'rows: {len(rows)}')
    print(f'renamed: {renamed}')
    print(f'missing: {missing}')
    print(f'active manifest: {MANIFEST}')
    print(f'new manifest: {OUT_MANIFEST}')
    print(f'backup: {BACKUP_MANIFEST}')


if __name__ == '__main__':
    main()
