import tkinter as tk
from tkinter import messagebox, ttk
import time

class FastFoodShop:
    def __init__(self, root):
        self.root = root
        self.root.title("🍔模拟快餐厅点餐系统")
        self.root.geometry("750x640")

        # 菜单
        self.menu = {
            "汉堡": 99999,
            "薯条": 99999,
            "可乐": 99999,
            "炸鸡": 99999,
            "冰淇淋": 99999,
            "披萨小块": 99999
        }
        self.order = {}  # 当前顾客订单
        self.all_orders = [] # 保存全部历史订单
        self.customer_id = 1 # 顾客编号自动递增

        # 会员等级配置
        self.member_levels = {
            "非会员": 1.0,
            "普通会员(9折)": 0.9,
            "银卡会员(85折)": 0.85,
            "金卡会员(8折)": 0.8
        }

        # 顶部信息区：顾客编号、堂食/外带、会员等级
        info_frame = tk.Frame(root)
        info_frame.pack(pady=8)
        tk.Label(info_frame, text="顾客编号：", font=("SimHei",12)).grid(row=0,column=0)
        self.cid_label = tk.Label(info_frame, text=str(self.customer_id), font=("SimHei",12,"bold"))
        self.cid_label.grid(row=0,column=1,padx=5)

        tk.Label(info_frame, text="用餐类型：", font=("SimHei",12)).grid(row=0,column=2,padx=5)
        self.dine_type = tk.StringVar(value="堂食")
        ttk.Combobox(info_frame, textvariable=self.dine_type, values=["堂食","外带"], width=8).grid(row=0,column=3)

        tk.Label(info_frame, text="会员等级：", font=("SimHei",12)).grid(row=0,column=4,padx=5)
        self.member_var = tk.StringVar(value="非会员")
        member_combo = ttk.Combobox(info_frame, textvariable=self.member_var, values=list(self.member_levels.keys()), width=12)
        member_combo.grid(row=0,column=5)
        member_combo.bind("<<ComboboxSelected>>", lambda e:self.refresh_order())

        # 菜单区域
        menu_frame = tk.Frame(root)
        menu_frame.pack(pady=5)
        tk.Label(menu_frame, text="菜单", font=("SimHei",14)).grid(row=0,column=0,columnspan=4,pady=3)
        row_idx =1
        for food_name, price in self.menu.items():
            tk.Label(menu_frame, text=f"{food_name} ¥{price}", font=("SimHei",12)).grid(row=row_idx, column=0, padx=5)
            tk.Button(menu_frame, text="+", width=3, command=lambda n=food_name:self.add_food(n)).grid(row=row_idx, column=1)
            tk.Button(menu_frame, text="-", width=3, command=lambda n=food_name:self.sub_food(n)).grid(row=row_idx, column=2)
            row_idx +=1

        # 当前订单
        order_frame = tk.Frame(root)
        order_frame.pack(pady=8)
        tk.Label(order_frame, text="当前订单", font=("SimHei",14)).pack()
        self.order_text = tk.Text(order_frame, width=58, height=9, font=("SimHei",11))
        self.order_text.pack()

        # 总价
        self.total_label = tk.Label(root, text="应付总价：¥0", font=("SimHei",14))
        self.total_label.pack(pady=4)

        # 功能按钮
        btn_frame = tk.Frame(root)
        btn_frame.pack(pady=6)
        tk.Button(btn_frame, text="提交订单", width=10, command=self.submit_order, bg="#4CAF50",fg="white").grid(row=0,column=0,padx=6)
        tk.Button(btn_frame, text="清空订单", width=10, command=self.clear_order, bg="#f44336",fg="white").grid(row=0,column=1,padx=6)
        tk.Button(btn_frame, text="收银员后台", width=10, command=self.show_backend, bg="#2196F3",fg="white").grid(row=0,column=2,padx=6)

    def add_food(self,name):
        if name in self.order:
            self.order[name] +=1
        else:
            self.order[name] = 1
        self.refresh_order()

    def sub_food(self,name):
        if name in self.order and self.order[name]>0:
            self.order[name] -=1
            if self.order[name]==0:
                del self.order[name]
        self.refresh_order()

    def refresh_order(self):
        self.order_text.delete(1.0, tk.END)
        raw_total = 0
        for food,num in self.order.items():
            p = self.menu[food]
            item = p*num
            raw_total += item
        # 获取折扣系数
        discount = self.member_levels[self.member_var.get()]
        final = round(raw_total * discount,2)

        #写入文本框
        for food,num in self.order.items():
            p = self.menu[food]
            self.order_text.insert(tk.END, f"{food} ×{num} = ¥{p*num}\n")

        level_name = self.member_var.get()
        if level_name != "非会员":
            self.order_text.insert(tk.END, f"\n原价 ¥{raw_total} | {level_name} → ¥{final}")
        else:
            self.order_text.insert(tk.END, f"\n合计 ¥{final}")
        self.total_label.config(text=f"应付总价：¥{final}")

    def submit_order(self):
        if not self.order:
            messagebox.showwarning("提示","您还没有选择任何菜品！")
            return
        raw_total = sum(self.menu[f]*n for f,n in self.order.items())
        discount = self.member_levels[self.member_var.get()]
        final_total = round(raw_total * discount,2)
        member_level = self.member_var.get()

        #保存订单记录
        order_info = {
            "cid": self.customer_id,
            "dine_type": self.dine_type.get(),
            "member_level": member_level,
            "items": self.order.copy(),
            "raw_total": raw_total,
            "final_total": final_total,
            "time": time.strftime("%Y-%m-%d %H:%M:%S")
        }
        self.all_orders.append(order_info)

        #弹窗小票
        msg = f"====订单小票【顾客{self.customer_id}】====\n用餐方式：{self.dine_type.get()}\n会员等级：{member_level}\n"
        for food,num in self.order.items():
            msg += f"{food} ×{num}\n"
        msg += f"\n原价：¥{raw_total}\n应付金额：¥{final_total}"
        messagebox.showinfo("下单成功！", msg)

        #新顾客，编号+1，清空当前订单
        self.customer_id +=1
        self.cid_label.config(text=str(self.customer_id))
        self.clear_order()

    def clear_order(self):
        self.order.clear()
        self.refresh_order()

    def show_backend(self):
        backend_win = tk.Toplevel(self.root)
        backend_win.title("收银员后台 - 全部订单记录")
        backend_win.geometry("680x480")
        txt = tk.Text(backend_win, width=80, height=22, font=("SimHei",10))
        txt.pack(padx=10,pady=10)
        if len(self.all_orders)==0:
            txt.insert(tk.END,"暂无任何订单\n")
        else:
            total_income =0
            for od in self.all_orders:
                txt.insert(tk.END,f"——————————————\n顾客编号：{od['cid']} | {od['time']}\n用餐类型：{od['dine_type']} | 会员等级：{od['member_level']}\n")
                for food,num in od['items'].items():
                    txt.insert(tk.END,f"  {food} ×{num}\n")
                txt.insert(tk.END,f"原价¥{od['raw_total']}，实收¥{od['final_total']}\n")
                total_income += od['final_total']
            txt.insert(tk.END,f"\n====================\n今日总收入：¥{round(total_income,2)}")
        txt.config(state="disabled")

if __name__ == "__main__":
    window = tk.Tk()
    app = FastFoodShop(window)
    window.mainloop()
