class User:
    """A User class
       (Django's User model inspired us)
    """

    def __init__(self, first_name, last_name):
        """Constructor, base values"""
        self.first_name = first_name
        self.last_name = last_name

    @property
    def get_full_name(self):
        """Return first separated by a whitespace
           and using title case for both.
        """
        # TODO 1: you code
        return '{} {}'.format(self.first_name.title(), self.last_name.title())

    @property
    def username(self):
        """A username consists of the first char of
           the user's first_name and the first 7 chars
           of the user's last_name, both lowercased.

           If this is your first property, check out:
           https://pybit.es/property-decorator.html
        """
        # TODO 2: you code
        return '{}{}'.format(str(self.first_name.lower())[:1], str(self.last_name.lower())[:7])

    # TODO 3: you code
    #
    # add a __str__ and a __repr__
    # see: https://stackoverflow.com/a/1438297
    # "__repr__ is for devs, __str__ is for customers"
    #
    # see also TESTS for required output

    def __str__(self):
        return '{} ({})'.format(self.get_full_name, self.username)

    def __repr__(self):
        """Don't hardcode the class name, hint: use a
           special attribute of self.__class__ ...
        """
        return '{}("{}", "{}")'.format(self.__class__.__name__, self.first_name, self.last_name)


class SpecialUser(User):
    pass


# def main():
#     print('thank you...')
#     bob = User('bob', 'belderbos')
#     assert bob.get_full_name == 'Bob Belderbos'
#     assert bob.username == 'bbelderb'  # lowercase!
#     assert str(bob) == 'Bob Belderbos (bbelderb)'
#     repr(bob) == 'User("bob", "belderbos")'

#     bob = User('julian', 'Sequeira')
#     assert bob.get_full_name == 'Julian Sequeira'
#     assert bob.username == 'jsequeir'  # lowercase!
#     assert str(bob) == 'Julian Sequeira (jsequeir)'
#     assert repr(bob) == 'User("julian", "Sequeira")'

#     bob = User('Tania', 'Courageous')
#     assert bob.get_full_name == 'Tania Courageous'  # aka PyBites Ninja
#     assert bob.username == 'tcourage'  # lowercase!
#     assert str(bob) == 'Tania Courageous (tcourage)'
#     assert repr(bob) == 'User("Tania", "Courageous")'

#     noah = SpecialUser('Noah', 'Kagan')
#     assert noah.get_full_name == 'Noah Kagan'
#     assert noah.username == 'nkagan'  # lowercase!
#     assert str(noah) == 'Noah Kagan (nkagan)'

#     assert repr(noah) == 'SpecialUser("Noah", "Kagan")'


# if __name__ == '__main__':
#     main()
