import tkinter
import tkinter.messagebox
import tkinter.scrolledtext
from tkinter import *

###class starts
class HDinfo():
    pass#remove it when you complete the codings

    #constructor __init__

    # __str__ method


class Applicant():
    pass#remove it when you complete the codings

    #constructor __init__

    # __str__ method

    #Set Personal Info Method

    #Set HD Info Method


applicant = Applicant()
###class ends


###Tkinter starts


#Parent class for Personal and HighDiploma
class ApplicationPage(tkinter.Frame):
    """Base class for managed pages. Provides methods to be overridden by subclasses."""

    def __init__(self, master):
        super().__init__(master)

    def is_complete(self) -> bool:
        """Check if the current page is complete."""
        return True


class Personal(ApplicationPage):
    def __init__(self, master):
        super().__init__(master)

        frm_base = tkinter.Frame(self)
        frm_base.pack(fill=tkinter.BOTH, expand=True)

        frm_title = tkinter.Frame(frm_base)
        frm_title.pack(fill=tkinter.BOTH)

        lbl_title = tkinter.Label(frm_title, text="Personal Infromation", font=("bold", 15))
        lbl_title.pack(anchor=tkinter.W)

        ###
        #Write your coding here
        frm_content = tkinter.Frame(frm_base)
        frm_content.pack(fill=tkinter.BOTH)
        frm_content.grid_columnconfigure(2,weight=1)


        lbl_name = tkinter.Label(frm_content, text="Employee Name")
        lbl_name.grid(row=0, column=0)
        ent_name = tkinter.Entry(frm_content)
        ent_name.grid(row=0, column=1, columnspan=2, sticky="nsew")

        ###


    def is_complete(self):

        ###
        #Write your coding here

        ###

        return True



class HighDiploma(ApplicationPage):
    def __init__(self, master):
        super().__init__(master)

        frm_base = tkinter.Frame(self)
        frm_base.pack(fill=tkinter.BOTH, expand=True)

        frm_title = tkinter.Frame(frm_base)
        frm_title.pack(fill=tkinter.BOTH)

        lbl_title = tkinter.Label(frm_title, text="Higher Diploma Information", font=("bold", 15))
        lbl_title.pack(anchor=tkinter.W)


        ###
        #Write your coding here

        ###

    def is_complete(self):
        ###
        #Write your coding here

        ###
        return True


class Result(ApplicationPage):
    def __init__(self, master):
        super().__init__(master)

        frm_base = tkinter.Frame(self)
        frm_base.pack(fill=tkinter.BOTH, expand=True)

        frm_title = tkinter.Frame(frm_base)
        frm_title.pack(fill=tkinter.BOTH)

        lbl_title = tkinter.Label(frm_base, text="Summary", font=("bold", 15))
        lbl_title.pack(anchor=tkinter.W)

        #Summary Output
        ###
        #Write your coding here

        ###

    def show(self): #Show Button method
        pass#remove it when you complete the codings
        ###
        #Write your coding here

        ###






class Application(tkinter.Tk):
    def __init__(self):
        super().__init__()

        # Configure GUI
        self.title("Undergraduate Application Form")
        self.geometry("450x300")

        # Content Frame
        frm_content = tkinter.Frame(self, relief=tkinter.RIDGE, borderwidth=1)
        frm_content.pack(fill=tkinter.BOTH, expand=True)
        frm_content.rowconfigure(0, weight=1)
        frm_content.columnconfigure(0, weight=1)



        # Application Pages
        self.__frames: list[ApplicationPage] = [
            Personal(frm_content),
            HighDiploma(frm_content),
            Result(frm_content),
        ]
        for i in self.__frames:
            i.grid(row=0, column=0, sticky=tkinter.NSEW)
        self.__current_page = 0
        self.__frames[self.__current_page].tkraise()

        # Bottom Frame
        frm_button = tkinter.Frame(self, padx=4, pady=4)
        frm_button.pack(side=tkinter.BOTTOM, fill=tkinter.X)

        # Next Button
        self.btn_next = tkinter.Button(frm_button, text="Next", command=self.next_page)
        self.btn_next.pack(side=tkinter.RIGHT)

        # Quit Button
        self.btn_quit = tkinter.Button(frm_button, text="Quit", command=self.destroy)

    def next_page(self):
        # Check if the current page is complete
        if not self.__frames[self.__current_page].is_complete():
            tkinter.messagebox.showinfo(
                "Information", "Please fill the missing fields."
            )
            return

        # Navigate to next page
        self.__current_page += 1
        self.__frames[self.__current_page].tkraise()

        # If we reached the last page, replace the next button with quit button
        if self.__current_page + 1 == len(self.__frames):
            self.btn_next.pack_forget()
            self.btn_quit.pack(side=tkinter.RIGHT)
###Tkinter ends


if __name__ == "__main__":
    app = Application()
    app.mainloop()
