from cpanlp.person.directors_supervisors_and_senior_executives.supervisor import *
from cpanlp.person.directors_supervisors_and_senior_executives.director import *

class NonManagementDirector(Supervisor,Director):
    """
    #### Non-management directors are members of a company's board of directors who are not part of the company's management team. They are typically elected by the shareholders and are responsible for overseeing the company's management, ensuring that the company is run in the best interest of its shareholders, and making important decisions about the company's strategy and future direction.
    #### Non-management directors are often considered to be independent and provide a crucial check on the actions of the management team. They are not involved in the day-to-day operations of the company and can bring a fresh perspective and outside expertise to the board. Their role is to provide oversight and offer a balanced view, and they are typically not beholden to the management team or any particular interest group.
    
    Features:
    - expertise: area of expertise of the non-management director
    - term_length: the length of the term for the non-management director
    - company: the company for which the non-management director is overseeing
    - shares: the shares owned by the non-management director
    - expected_return: the expected return of the shares owned by the non-management director
    - risk_preference: the risk preference of the non-management director
    - portfolio: the investment portfolio of the non-management director
    - name: the name of the non-management director
    - age: the age of the non-management director
    - wealth: the wealth of the non-management director
    - utility_function: the utility function of the non-management director

    Methods:
    - oversee(): oversees the management of the company for the term length specified
    """
    def __init__(self, name, expertise=None, term_length=None, company=None,shares=None,expected_return=None, risk_preference=None, portfolio=None,age=None, wealth=None,utility_function=None):
        Supervisor.__init__(self, name, age,wealth,utility_function)
        Director.__init__(self, name,shares,expected_return, risk_preference, portfolio,age, wealth,utility_function)
        self.expertise = expertise
        self.term_length = term_length
        self.company = company

    def oversee(self):
        print(f"{self.name}, a non-management director with expertise in {self.expertise}, is overseeing the management of {self.company} for a term of {self.term_length} years.")