#!/usr/bin/env python

USAGE = """Get command for OS/X

Very basic implementation of getent command for OS/X
"""

import grp
import pwd
from systematic.shell import Script, ScriptCommand
from systematic.user import UnixPasswordDB, DatabaseError


class GetEntCommand(ScriptCommand):
	def __init__(self, *args, **kwargs):
		super(GetEntCommand, self).__init__(*args, **kwargs)
		self.accounts = UnixPasswordDB()


class PasswdCommand(GetEntCommand):
	def run(self, args):
		self.accounts.load_users()
		for name in args.names:
			try:
				user = self.accounts.lookup_user(name)
				script.message(':'.join([
					'{0}'.format(user.username),
					'{0}'.format(user.password),
					'{0}'.format(user.uid),
					'{0}'.format(user.gid),
					'{0}'.format(user.gecos),
					'{0}'.format(user.directory),
					'{0}'.format(user.shell),
				]))
			except DatabaseError:
				pass


class GroupCommand(GetEntCommand):
	def run(self, args):
		self.accounts.load_groups()
		for name in args.names:
			try:
				group = self.accounts.lookup_group(name)
				script.message(':'.join([
					'{0}'.format(group.name),
					'{0}'.format(group.password),
					'{0}'.format(group.gid),
					','.join(group.member_uids),
				]))
			except DatabaseError:
				pass


script = Script(USAGE)

c = script.add_subcommand(PasswdCommand('passwd', 'Lookup users'))
c.add_argument('names', nargs='*', help='Names to lookup')

c = script.add_subcommand(GroupCommand('group', 'Lookup groups'))
c.add_argument('names', nargs='*', help='Names to lookup')

args = script.parse_args()
