add IBuildLight and refactor Program to use appropriate type