import pandas as pd import json import os class DataEngine: def __init__(self, csv_path="test_customer.csv", json_path="product_collection.json"): self.csv_path = csv_path self.json_path = json_path self.products = {} self.customers_df = None self._load_data() def _load_data(self): # 1. Nạp JSON Sản phẩm try: with open(self.json_path, 'r', encoding='utf-8') as f: product_list = json.load(f) self.products = {item['id']: item for item in product_list} print("✅ [DataEngine] Đã nạp JSON gói cước.") except Exception as e: print(f"❌ [DataEngine] Lỗi JSON: {e}") # 2. Nạp CSV Khách hàng try: self.customers_df = pd.read_csv(self.csv_path) # Ép kiểu Customer ID sang string để tìm kiếm chính xác self.customers_df['Customer ID'] = self.customers_df['Customer ID'].astype(str) # Xử lý khoảng trắng thừa ở cột id gói cước if 'id' in self.customers_df.columns: self.customers_df['id'] = self.customers_df['id'].astype(str).str.strip() print("✅ [DataEngine] Đã nạp CSV khách hàng.") except Exception as e: print(f"❌ [DataEngine] Lỗi CSV: {e}") def get_full_context(self, customer_id): if self.customers_df is None: return None str_id = str(customer_id).strip() row = self.customers_df[self.customers_df['Customer ID'] == str_id] if row.empty: return None customer_data = row.iloc[0].to_dict() # --- XỬ LÝ LOGIC TÊN GỌI (VÌ CSV KHÔNG CÓ CỘT NAME) --- gender = str(customer_data.get('Gender', '')).lower() if 'female' in gender: display_name = "Chị" elif 'male' in gender: display_name = "Anh" else: display_name = "Quý khách" # Thêm trường hiển thị tên vào dict trả về customer_data['Display_Name'] = display_name # Lấy thông tin gói cước current_pkg_id = str(customer_data.get('id', '')).strip() pkg_info = self.products.get(current_pkg_id, { "name": f"Gói {current_pkg_id}", "desc": "Không có mô tả", "price": 0 }) return { "customer": customer_data, "current_package": pkg_info }