# -*- coding: utf-8 -*-
"""Rollback the 335 templated descriptions written in the 2026-05-22..05-23 session.
These are leaders at target indices 1617..1952 (everything from 341418BC8850 onwards).
Reason: too much template-driven content (param-substituted boilerplate) - user requested restart with proper per-cikkszám research.
"""
import openpyxl, json, os, time

BASE = os.path.dirname(os.path.abspath(__file__))
DST = os.path.join(BASE, 'merged_master_v2_updated.xlsx')
PROGRESS = os.path.join(BASE, '_progress.json')
TARGETS = os.path.join(BASE, '_targets.json')

with open(TARGETS, encoding='utf-8') as f:
    targets = json.load(f)

# Identify leaders to roll back: target indices 1617..end (everything we added this session)
# Those are 341418BC8850 onwards
START_IDX = None
for i, t in enumerate(targets):
    if t['leader'] == '341418BC8850':
        START_IDX = i
        break
assert START_IDX is not None, 'leader anchor not found'

to_rollback = targets[START_IDX:]
print(f'Will roll back {len(to_rollback)} leaders from target index {START_IDX}')

leaders_to_clear = []
rows_to_clear = []
cikks_to_clear = []
for t in to_rollback:
    leaders_to_clear.append(t['leader'])
    for v in t['variants']:
        rows_to_clear.append(v['row'])
        cikks_to_clear.append(v['cikk'])

print(f'Rows to clear: {len(rows_to_clear)}, cikks: {len(cikks_to_clear)}')

# Clear xlsx cells
wb = openpyxl.load_workbook(DST)
ws = wb['Sheet1']
for r in rows_to_clear:
    ws.cell(row=r, column=104, value=None)
    ws.cell(row=r, column=105, value=None)
tmp = DST + '.tmp'
wb.save(tmp); wb.close()
for i in range(30):
    try:
        os.replace(tmp, DST); break
    except PermissionError:
        if i == 0: print('File locked, retrying...')
        time.sleep(2)
else:
    raise PermissionError('Could not replace xlsx')
print(f'Cleared {len(rows_to_clear)} xlsx rows.')

# Update progress
with open(PROGRESS, encoding='utf-8') as f:
    prog = json.load(f)
done_leaders_set = set(prog['done_leaders']) - set(leaders_to_clear)
done_cikks_set = set(prog['done_cikks']) - set(cikks_to_clear)
prog['done_leaders'] = list(done_leaders_set)
prog['done_cikks'] = list(done_cikks_set)
prog['next_index'] = len(done_leaders_set)
tmp = PROGRESS + '.tmp'
with open(tmp, 'w', encoding='utf-8') as f:
    json.dump(prog, f, ensure_ascii=False, indent=1)
os.replace(tmp, PROGRESS)
print(f'Progress restored: done_leaders={len(done_leaders_set)}, done_cikks={len(done_cikks_set)}, next_index={prog["next_index"]}')
