"""A durable at-most-once creation journal; uncertain outcomes are queried, never recreated."""
import hashlib
import json
import sqlite3
from pathlib import Path
from .models import ControlError

class Operations:
    def __init__(self,path):
        self.path=Path(path).expanduser();self.path.parent.mkdir(parents=True,exist_ok=True,mode=0o700)
        with self.connect() as db:
            db.execute('CREATE TABLE IF NOT EXISTS operations (device TEXT, id TEXT, digest TEXT, state TEXT, result TEXT, PRIMARY KEY(device,id))')
        self.path.chmod(0o600)
    def connect(self):
        db=sqlite3.connect(self.path);db.execute('PRAGMA synchronous=FULL');return db
    def get(self,device,oid):
        with self.connect() as db: row=db.execute('SELECT state,result FROM operations WHERE device=? AND id=?',(device,oid)).fetchone()
        return dict(operation_id=oid,state=row[0],**json.loads(row[1])) if row else dict(operation_id=oid,state='NOT_FOUND')
    def begin(self,device,oid,payload):
        if not isinstance(oid,str) or not 1<=len(oid)<=64: raise ControlError('Invalid operation identity',400)
        digest=hashlib.sha256(json.dumps(payload,sort_keys=True).encode()).hexdigest()
        with self.connect() as db:
            row=db.execute('SELECT digest FROM operations WHERE device=? AND id=?',(device,oid)).fetchone()
            if row:
                if row[0]!=digest: raise ControlError('Operation identity reused',409)
                return False
            db.execute('INSERT INTO operations VALUES (?,?,?,?,?)',(device,oid,digest,'UNKNOWN','{}'))
        return True
    def write(self,device,oid,state,**result):
        with self.connect() as db: db.execute('UPDATE operations SET state=?,result=? WHERE device=? AND id=?',(state,json.dumps(result),device,oid))
        return self.get(device,oid)
