"""Owner-reviewed renewal of an observation deadline; the entry freeze stays locked."""
import argparse,json
from datetime import datetime,timezone,timedelta
from infinbot_common import private_read,strict_json,Rejected
from risk_state import RiskState


def renew(config,reference):
    if not isinstance(reference,str) or not reference.strip() or len(reference)>150:raise Rejected('Explicit owner review reference required')
    private_read(config['gateway_token_file'],1024)
    state=RiskState(config['risk_state']);old=state.status();deadline=datetime.now(timezone.utc)+timedelta(hours=6)
    with state.connect() as c:
        c.execute('BEGIN IMMEDIATE')
        c.execute('UPDATE control SET deadline=? WHERE id=1',(deadline.isoformat(),))
        c.execute('INSERT INTO events(event,observed_at) VALUES(?,?)',('OWNER_REVIEWED_OBSERVER_WINDOW:'+reference,datetime.now(timezone.utc).isoformat()))
    result=state.status()
    return {'status':'OBSERVATION_DEADLINE_RENEWED_FREEZE_RETAINED','old_deadline':old['deadline'],**result}


if __name__=='__main__':
    p=argparse.ArgumentParser();p.add_argument('--config',required=True);p.add_argument('--review-reference',required=True);args=p.parse_args()
    try:print(json.dumps(renew(strict_json(private_read(args.config)),args.review_reference),indent=2))
    except Exception:print(json.dumps({'status':'RENEWAL_BLOCKED','entries_frozen':True}));raise SystemExit(1)
