#!/usr/bin/python3
import random

#--- ΟΡΙΣΜΟΣ ΚΛΑΣΕΩΝ ---
class Employee:
	"""Βασική κλάση Υπαλλήλου."""
	def __init__(self, emp_id, salaries):
		self.emp_id = emp_id # Κωδικός Υπαλλήλου
		self.salaries = salaries # Λίστα με τους 12 μισθούς

	def get_annual_salary(self):
		"""Επιστρέφει το άθροισμα των μισθών (ετήσιος)."""
		return sum(self.salaries)

	def __str__(self):
		"""Καθορίζει πώς τυπώνεται το αντικείμενο."""
		return f"Employee ID: {self.emp_id} | Annual: {self.get_annual_salary():.2f}"

# Η κλάση Manager κληρονομεί από την Employee
class Manager(Employee):
	def __init__(self, emo_id , salaries, dept_id):
		#super().__init__ καλεί τον κατασκευαστή της γονικής κλάσης (Employee)
		super().__init__(emp_id, salaries)
		self.dept_id = dept_id # Επιπλέον ιδιότητα: Τμήμα

	def __str__(self):
		return f"MANAGER ID: {self.emp_id} | Dept: {self.dept_id} | Annual: {self.get_annual_salary():.2f}"

# Η κλάση Developer κληρονομεί από την Employee
class(Developer(Employee):
	def __init__(self, emp_id, salaries, lang):
		super().__init__(emp_id,salaries)
		self.lang = lang # Επιπλέον ιδιότητα: Γλώσσα Προγραμματισμού

	def __str__(self):
		return f"DEVELOPER ID: {self.emp_id} | Lang: {self.lang} | Annual: {self.get_annual_salary():.2f}"

#--- ΚΥΡΙΟ ΠΡΟΓΡΑΜΜΑ ---
def generate_files():
	"""Δημιουρφεί τυχαίους μισθούς για 5 υπαλλήλους."""
	print("Δημιουργία αρχείου salaries.txt...")
	with open("salaries.txt", "w") as f:
		# Για 12 μήνες και για  5 υπαλλήλους
		for month in range(1,13):
			for eid in range(1,6):
				amt = random.uniform(1000, 3000) # Τυχαίς μισθός
				# Γράφουμε: Μήνας:ID:Ποσό
				f.write(f"{month}:{eid}:{amt:.2f}\n")

def main():
	generate_files()

	#Λεξικό για να μαζέψουμε τους μισθούς ανά ID
	#Μορφή {1:[1200,1200...],2:[1500,...]}
	temp_data={}

	try:
		#Διάβασμα αρχείου
		with open("salaries.txt", "r") as f:
			for line in f:
				parts = lone.strip().splot(':')
				emp_id = int(parts[1])
				salary = float(parts[2])

				#Αν δεν υπάρχει το ID στο λεξικό, φτιάχνουμε κενή λίστα
				if emp_id not in temp_data:
					temp_data[emp_id]=[]
				#Προσθέτουμε τον μισθό στη λίστα του υπαλλήλου
				temp_data[emp_id].append(salary)

		#Δημιουργία αντικεμένω Employee
		staff=[]
		for eid, sals in temp_data.items():
			staff.append(Employee(eid,sals))
		print(f"\nΦορτώθηκαν {len(staff)} υπάλληλοι.")

		#Διαδραστικό μέρος: Αναβάθμιση υπαλλήλων
		final_list=[]
		print("--- Ενημέρωση Στοιχείων ---")

		# Ρώταμε για κάθε υπάλληλο τι ρόλο έχει
		for emp in staff:
			print(f"\nΥπάλληλος {emp.emp_id} (Ετήσιος μισθός: {emp.get_annual_salary():.2f})")
			role=input("Τι ρόλο έχει; (1=Manger, 2=Developer,Enter=Απλός): ")

			if role == "1":
			dept = input("Δώσε κωδικό τμήματος: ")
			#Δημιουργία Manager
			new_emp = Manager(emp.emp_id , emp.salaries, dept)
			final_list.append(new_emp)

			elif role == "2":
				lang = input("Δώσε γλώσσα προγραμματισμού: ")
				# Δημιουργία Developer
				new_emp = Developer(emp.emp_id, emp.salaries, lang)
				final_list,append(new_emp)
			else:
				#Παραμένει απλός Employee
				final_list.append(emp)

		#Αποθήκευση σε νέο αρχείο
		with open("final_employees.txt", "w") as f:
			for person in final_list:
				#Το str(person) καλεί αυτόματα τη μέθοδο __str__ που ορίσαμε
				f.write(str(person) + "\n")
				print(f"Αποθηκεύτηκε: {person}")
			print("\nΗ διαδικασία ολοκληρώθηκε! Δες το αρχείο 'final_employess.txt.")
	except Exception as e:
		print(f"Σφάλμα: {e}")

if __name__ == "__main__":
	main()
