import customtkinter as ctk
from tkinter import messagebox
import os
import sys

# Thêm thư mục gốc vào path để import core module
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from core.hkd_tax import calculate_hkd_tax, INDUSTRY_RATES
from core.reports.hkd_report import export_hkd_01_cnkd

class AccountantCommunityApp(ctk.CTk):
    def __init__(self):
        super().__init__()

        self.title("Accountant Community - Kế toán HKD 2026")
        self.geometry("600x500")
        ctk.set_appearance_mode("dark")
        ctk.set_default_color_theme("blue")

        # Cấu hình grid
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)

        self.main_frame = ctk.CTkFrame(self)
        self.main_frame.grid(row=0, column=0, padx=20, pady=20, sticky="nsew")
        self.main_frame.grid_columnconfigure(1, weight=1)

        # Tiêu đề
        self.label_title = ctk.CTkLabel(self.main_frame, text="PHẦN MỀM KẾ TOÁN CỘNG ĐỒNG", font=ctk.CTkFont(size=20, weight="bold"))
        self.label_title.grid(row=0, column=0, columnspan=2, padx=20, pady=20)

        # Doanh thu
        self.label_revenue = ctk.CTkLabel(self.main_frame, text="Doanh thu (VND):")
        self.label_revenue.grid(row=1, column=0, padx=20, pady=10, sticky="e")
        self.entry_revenue = ctk.CTkEntry(self.main_frame, placeholder_text="Nhập doanh thu...")
        self.entry_revenue.grid(row=1, column=1, padx=20, pady=10, sticky="ew")

        # Ngành nghề
        self.label_industry = ctk.CTkLabel(self.main_frame, text="Ngành nghề:")
        self.label_industry.grid(row=2, column=0, padx=20, pady=10, sticky="e")
        self.option_industry = ctk.CTkOptionMenu(self.main_frame, values=[
            "1.5% (Bán buôn, bán lẻ hàng hóa)",
            "3% (Sản xuất, gia công, kinh doanh khác)",
            "4.5% (Dịch vụ ăn uống, vận tải, có bao thầu vật tư)",
            "7% (Dịch vụ thuần túy, lưu trú, không bao thầu vật tư)",
            "10% (Cho thuê tài sản)",
            "Tỷ lệ % tính thuế GTGT không xác định"
        ])
        self.option_industry.grid(row=2, column=1, padx=20, pady=10, sticky="ew")
        
        # Ánh xạ text menu sang industry_code
        self.industry_map = {
            "1.5% (Bán buôn, bán lẻ hàng hóa)": "nhom_1_5",
            "3% (Sản xuất, gia công, kinh doanh khác)": "nhom_3",
            "4.5% (Dịch vụ ăn uống, vận tải, có bao thầu vật tư)": "nhom_4_5",
            "7% (Dịch vụ thuần túy, lưu trú, không bao thầu vật tư)": "nhom_7",
            "10% (Cho thuê tài sản)": "nhom_10",
            "Tỷ lệ % tính thuế GTGT không xác định": "khong_xac_dinh"
        }

        # Nút tính toán
        self.btn_calculate = ctk.CTkButton(self.main_frame, text="TÍNH THUẾ", command=self.on_calculate)
        self.btn_calculate.grid(row=3, column=0, columnspan=2, padx=20, pady=20)

        # Kết quả
        self.result_frame = ctk.CTkFrame(self.main_frame)
        self.result_frame.grid(row=4, column=0, columnspan=2, padx=20, pady=10, sticky="nsew")
        self.result_frame.grid_columnconfigure(0, weight=1)

        self.text_result = ctk.CTkTextbox(self.result_frame, height=150)
        self.text_result.grid(row=0, column=0, padx=10, pady=10, sticky="nsew")

        # Nút xuất Excel
        self.btn_export = ctk.CTkButton(self.main_frame, text="XUẤT MẪU 01/CNKD (EXCEL)", command=self.on_export, state="disabled")
        self.btn_export.grid(row=5, column=0, columnspan=2, padx=20, pady=10)

        self.last_result = None

    def on_calculate(self):
        try:
            revenue_str = self.entry_revenue.get().replace(',', '').replace('.', '')
            if not revenue_str:
                messagebox.showerror("Lỗi", "Vui lòng nhập doanh thu")
                return
                
            revenue = float(revenue_str)
            industry_text = self.option_industry.get()
            industry_code = self.industry_map[industry_text]

            result = calculate_hkd_tax(revenue, industry_code)
            self.last_result = result

            self.text_result.delete("1.0", "end")
            msg = f"--- KẾT QUẢ TÍNH THUẾ ---\n"
            msg += f"Doanh thu: {result['revenue']:,.0f}đ\n"
            msg += f"Thuế GTGT ({result['gtgt_rate']}%): {result['gtgt_due']:,.0f}đ\n"
            msg += f"Thuế TNCN ({result['tncn_rate']}%): {result['tncn_due']:,.0f}đ\n"
            msg += f"Tổng thuế: {result['total_due']:,.0f}đ\n"
            msg += f"\nGhi chú: {result['note']}"
            
            self.text_result.insert("1.0", msg)
            self.btn_export.configure(state="normal")
            
        except ValueError:
            messagebox.showerror("Lỗi", "Doanh thu phải là con số")

    def on_export(self):
        if not self.last_result:
            return
            
        try:
            path = export_hkd_01_cnkd(self.last_result)
            messagebox.showinfo("Thành công", f"Đã xuất file tại:\n{path}")
            os.startfile(os.path.dirname(path)) # Mở thư mục chứa file
        except Exception as e:
            messagebox.showerror("Lỗi", f"Không thể xuất file: {str(e)}")

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