#!/usr/bin/python3

import pykbrd


def mandatory(kw):
    return pykbrd.app.Param(kw=kw, factory=int, mandatory=True)


def optional(kw):
    return pykbrd.app.Param(kw=kw, factory=int)


def alt(*sets):
    return pykbrd.app.AltParamSet(sets)


def seq(*sets):
    return pykbrd.app.ParamSet(sets)


if __name__ == '__main__':
    result = pykbrd.run(
        action_cls=pykbrd.app.TaskMoveAction,
        ki=pykbrd.kbrd.TASK_INFO,
        scheme=seq(
            mandatory('task_id'),
            alt(
                seq(mandatory('column_id'),
                    optional('swimlane_id'),
                    optional('position'),),
                seq(optional('column_id'),
                    mandatory('swimlane_id'),
                    optional('position'),),
                seq(optional('column_id'),
                    optional('swimlane_id'),
                    mandatory('position'),),
            ),
        ),
    )
    print('\n'.join(result.lines))
