import json
import sys

from ereuse_devicehub.db import db
from ereuse_devicehub.devicehub import Devicehub
from ereuse_devicehub.resources.action.models import Snapshot


def open_snapshot():
    path = sys.argv[2]
    f = open(path)
    txt = f.read()
    return json.loads(txt)


def get_family(snapshot):
    debug = snapshot.get('debug', {})
    lshw = debug.get('lshw', {})
    return lshw.get('configuration', {}).get('family', '')


def get_device(uuid):
    snapshot = Snapshot.query.filter_by(uuid=uuid).first()
    if snapshot:
        return snapshot.device


def main():
    schema = sys.argv[1]
    app = Devicehub(inventory=schema)
    app.app_context().push()
    snapshot = open_snapshot()
    uuid = snapshot.get('uuid')
    if not uuid:
        return
    family = get_family(snapshot)
    device = get_device(uuid)
    if not device:
        return
    device.family = family
    device.set_hid()
    for c in device.components:
        c.set_hid()

    if device.binding:
        device.binding.device.family = family
        device.binding.device.set_hid()
        for c in device.binding.device.components:
            c.set_hid()
    db.session.commit()


if __name__ == '__main__':
    main()