# Exercise 9-8 Privileges
# Learning Objective: Compostition

class Users:
    def __init__(self, first_name, last_name, dob, state, hair_color):
        """Initialize User Profile variables"""
        self.first_name = first_name
        self.last_name = last_name
        self.dob = dob
        self.state = state
        self.hair_color = hair_color
        self.login_attempts = 0 

    def describe_user(self):
        """Prints descriptions of user based on inputs"""
        print(f"{self.first_name} {self.last_name} was born on {self.dob}, they live in {self.state} and they have {self.hair_color}") 
    
    def greet_user(self):
        """Prints personalized greeting to user specified"""
        print(f"Welcome to this python program, {self.first_name} {self.last_name}!")

    def increment_login_attempts(self):
        """Increments Login Attempts by one"""
        self.login_attempts += 1
    
    def reset_login_attempts(self):
        """Resets login attempts to zero"""
        self.login_attempts = 0

class Privileges:
    def __init__(self, privileges=[]):
        """Create separate class for privileges """
        self.privileges  = privileges
    
    def show_privileges(self): 
        """ Print Privileges list """
        print(f"This user has the following privileges:\n")
        if self.privileges:
            for privilege in self.privileges:
                print(f" - {privilege}")
                break
            else: 
                print(" - This user has no privileges.")

class Admin(Users):
    def __init__(self, first_name, last_name, dob, state, hair_color):
        """ Initialize Users the add sepeicifc Admin attributes/methods """
        super().__init__(first_name, last_name, dob, state, hair_color)
        self.privileges = Privileges()

super_stan = Admin("Stan", "Gerk", "07/02/1954", "GA", "Blonde")
super_stan.describe_user()

super_stan.privileges.show_privileges()

print("Adding privileges...")
super_stan_privileges = ["can add post", "can delete post", "can ban user", "can unban user", "can create user", "can delete user", "can modify site contents"]    

super_stan.privileges.privileges = super_stan_privileges

super_stan.privileges.show_privileges()

### Needed tremendous helps with this one. Much of this code is taken from Author's solution here: https://ehmatthes.github.io/pcc_3e/solutions/chapter_9/#9-8-privileges