"""
Read the description of subclass PatientRoster below, and then add a str method,
including a docstring, to subclass PatientRoster. You do not need examples in
this docstring. Your str method will be used to display the list of patients.

Assume PatientRoster.add() takes a list in the form [OHIP number, family name,
first name, gender] where OHIP number is an int.

Context: an appointment system for a doctor's office.
A patient roster tracks a doctor's patients, each of whom has an OHIP number,
family name, first name and gender. Sometimes patients move, change doctors,
or die, and in those cases they need to be removed from the doctor's list. We
need to be able to display a list of all patients, where each line has the form:
First name: <name>, Last name: <last name>, OHIP: <ohip here>
"""


class Roster:
    """
    Represents a roster of members.
    @param dict members: represents this roster’s members
    """
    def __init__(self):
        """
        Initialize new roster self.
        @param Roster self: this Roster
        @rtype: None
        """
        self.members = {}

    def add(self, member):
        """
        Add member to roster self.
        @param Roster self: this Roster
        @param tuple member: member record to add
        @rtype: None
        Assume:
        -- member is a tuple with member[0] not in self.members,
        -- len(member) > 1
        """
        self.members[member[0]] = member[1:]

    def remove(self, member):
        """
        Remove member from roster self.
        @param Roster self: this Roster
        @param tuple member: member record to be removed
        @rtype: None
        Assume:
        --member is a tuple with member[0] in self.members
        --len(member) > 1
        """
        del(self.members[member[0]])

    def __str__(self):
        """
        Return a string representation of the members of roster self.
        @param Roster self: this Roster
        @rtype: str
        """
        raise NotImplementedError

class PatientRoster(Roster):
    """
    Represents a roster of patients.
    """

    def __str__(self):
        """
        Return a string representation of the members of PatientRoster self.
        @param PatientRoster self: this Roster
        @rtype: str
        """
        ret_str = ""
        for ohip in self.members:
            (last, first) = self.members[ohip][:2]
            ret_str += "First name: {}, Last name: {}, OHIP: {}\n".format(
                first, last, str(ohip)
            )

        return ret_str[:-1]
