from .operation import *


def _to_client_point(coord: str) -> dict[str, float]:
    xy = coord.removeprefix('(').removesuffix(')').split(',')
    return { 'x': float(xy[0]), 'y': float(xy[1]) }


def get_node_coord(name: str, id: str) -> dict[str, float]:
    row = read(name, f"select * from coordinates where node = '{id}'")
    return _to_client_point(row['coord'])

# exception ! need merge to node change set !
def inp_in_coord(section: list[str]) -> dict[str, dict[str, float]]:
    coords = {}
    for s in section:
        # skip comment
        if s.startswith(';'):
            continue
        tokens = s.split()
        coords[tokens[0]] = { 'x': tokens[1], 'y': tokens[2] }
    return coords


def inp_out_coord(name: str) -> list[str]:
    lines = []
    objs = read_all(name, 'select * from coordinates')
    for obj in objs:
        node = obj['node']
        coord = _to_client_point(obj['coord'])
        x = coord['x']
        y = coord['y']
        lines.append(f'{node} {x} {y}')
    return lines
