/**************************************************************************
 * All classes together
 *************************************************************************/
/**************************************************************************
 * The Employee class
 * Made all fields private
 * Added getters and setters
 *************************************************************************/
class Employee 
{
    private static String companyName  = "XYZ inc.";     // class variables
    private static int    employeeCount;
    
    private String position;                             // instance variables
    private String lastname; 
    private String firstname;
    private String sex;
    private int    age;

    Employee(String title , String last, String first, String x, int old)     // constructor
    {
        position  = title;
        lastname  = last;
        firstname = first;
        sex       = x;
        age       = old;
        
        employeeCount += 1; 
    }

    static String getCompanyName()      // static methods (getters)
    {
        return (companyName);
    }
    static int getEmployeeCount()      
    {
        return (employeeCount);
    }
 
    String getPosition()                //instance methods (getters)
    {
        return (position);
    }
    String getLastname( )              
    {
        return (lastname);
    }
    String getFirstname( )              
    {
        return (firstname);
    }
    String getGender( )                 
    {
        return (sex);
    }
    int getAge( )                       
    {
        return (age);
    }

    void  setPosition(String title)     //instance methods (setters)
    {
        position = title;
    }
    void  setLastname(String last)      
    {
        lastname = last;
    }
    void  setFirstname(String first)    
    {
        firstname = first;
    }
    void  setGender(String gender)      
    {
        sex = gender;
    }
    void  setAge(int old)               
    {
        age = old;
    }
    
    static void companyInfo()                               
    {                                                       
        System.out.println("Company   "  + companyName);
        System.out.println("Empl count " + employeeCount);
    }

    String  getFullname (String salutation)                           
    {                                                                 
        String fullname = salutation +" "+ firstname +" "+ lastname;    
        return (fullname);
    }
    
    public String toString()                                        
    {                                                               
        String data = "Company     "  + companyName +                             
                      "\t Position: " + position  +                 
                      "\t Name: "     + firstname +" "+ lastname + 
                      "\t Sex: "      + sex + 
                      "\t Age: "      + age;
        return (data);
    }
}                   


/**************************************************************************
 * The Employee Tester class
 * Calling the getters and setters
 *************************************************************************/
public class EmployeeTest
{
    public static void main (String[ ] args)
    {        

    //  String company = Employee.companyName;                      //I cannot access field, must use getter

        String company = Employee.getCompanyName();                 //Now I have to access it
        System.out.println("Company name: " + company);             //using the getter method

        int count = Employee.getEmployeeCount();           
        System.out.println("Number employees: " + count);


        Employee e1 = new Employee("Dir","Sultan","Sam","M",48);    //instantiate
        Employee e2 = new Employee("Mgr","Smith","Mary","F",35);    //objects
        Employee e3 = new Employee("Sec","Stevens","Bob","M",28);
        Employee x  = new Employee("???","Person","Mystery","",0);

        
        String name1 = e1.getFullname("Mr.");                       //call instance method 
        System.out.println(name1);

        String name2 = e2.getFullname("Ms."); 
        System.out.println(name2);

        String name3 = e3.getFullname("Mr."); 
        System.out.println(name3);

        String name4 = x.getFullname("Unknown"); 
        System.out.println(name4);

//      Employee.employeeCount += 10;                               //I cannot do this

        count = Employee.getEmployeeCount();                        //I can only access thru
        System.out.println("Number employees: " + count);           //the getter method. There is no setter


        String before = x.getFirstname() + " " + x.getLastname();   //call getters 

        System.out.println("\nBefore change: " + before);

        x.setLastname("Potter");                                    //call setters            
        x.setFirstname("Harry");
        x.setGender("M");
        x.setAge(14);

        System.out.println("After  change: " + x.getFirstname() + 
                                         " " + x.getLastname() ); 

        name4 = x.getFullname("Sir."); 
        System.out.println(name4);
   }
}