import os
import mysql.connector
# from dotenv import load_dotenv
# load_dotenv()

# ============================================================
# 第一步：建立数据库连接
# ============================================================
# 使用环境变量管理敏感信息，这是生产级代码的基本规范
# 这里拿到的是幻境中的env
conn = mysql.connector.connect(
    host=os.getenv("DB_HOST", "127.0.0.1"),
    port=int(os.getenv("DB_PORT", 3306)),
    user=os.getenv("DB_USER", "root"),
    password=os.getenv("DB_PASSWORD", "admin"),
    database=os.getenv("DB_NAME", "analytics_demo"),
    charset="utf8mb4",  #定义字符集配置，否则Windows 默认编码是 gbk，中文字符在插入数据库前就被转成了 ?，所以数据库里存的就是问号
    collation="utf8mb4_unicode_ci",
)
cursor = conn.cursor()

# ============================================================
# 第二步：创建表结构
# ============================================================

# 员工表：存储公司内部人员信息
# 用于分析：部门人数分布、薪资结构、入职趋势等
cursor.execute("""
CREATE TABLE IF NOT EXISTS employees (
    id          INT PRIMARY KEY AUTO_INCREMENT,  -- 自增主键
    name        VARCHAR(50)  NOT NULL,           -- 姓名
    department  VARCHAR(50)  NOT NULL,           -- 所属部门
    salary      DECIMAL(10,2) NOT NULL,          -- 月薪（精确到分）
    hire_date   DATE                             -- 入职日期
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
""")

# 产品表：存储在售商品信息
# 用于分析：品类销售、价格分布、库存预警等
cursor.execute("""
CREATE TABLE IF NOT EXISTS products (
    id           INT PRIMARY KEY AUTO_INCREMENT,  -- 自增主键
    product_name VARCHAR(100) NOT NULL,           -- 商品名称
    category     VARCHAR(50)  NOT NULL,           -- 商品分类
    price        DECIMAL(10,2) NOT NULL,          -- 单价
    stock        INT DEFAULT 0                    -- 当前库存量
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
""")

# 订单表：记录每笔交易
# 用于分析：销售趋势、员工绩效、产品热度等
cursor.execute("""
CREATE TABLE IF NOT EXISTS orders (
    id           INT PRIMARY KEY AUTO_INCREMENT,  -- 自增主键
    employee_id  INT NOT NULL,                    -- 下单员工（外键）
    product_id   INT NOT NULL,                    -- 购买商品（外键）
    quantity     INT NOT NULL,                    -- 购买数量
    order_date   DATE NOT NULL,                   -- 下单日期
    FOREIGN KEY (employee_id) REFERENCES employees(id),   -- 关联员工表
    FOREIGN KEY (product_id)  REFERENCES products(id)     -- 关联产品表
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
""")

# ============================================================
# 第三步：插入演示数据
# ============================================================

# 员工数据：5 个员工，分属 3 个部门
employees_data = [
    (1, "张三", "技术部",   20000.00, "2023-01-15"),
    (2, "李四", "销售部",   11000.00, "2023-02-20"),
    (3, "王五", "技术部",   16000.00, "2022-11-10"),
    (4, "赵六", "人力资源", 5000.00, "2023-03-01"),
    (5, "钱七", "销售部",   17000.00, "2022-12-05"),
]

# 产品数据：4 款商品，覆盖 2 个品类
products_data = [
    (1, "笔记本电脑", "电子产品", 6999.00, 500),
    (2, "机械键盘",   "电子产品", 399.00,  1000),
    (3, "办公椅",     "办公用品", 499.00,  300),
    (4, "显示器",     "电子产品", 1200.00, 400),
]

# 订单数据：5 笔订单，模拟真实购买行为
orders_data = [
    (1, 1, 1, 2, "2024-01-15"),  # 张三买了 2 台笔记本
    (2, 2, 2, 15, "2024-01-16"),  # 李四买了 15 个键盘
    (3, 3, 1, 10, "2024-01-17"),  # 王五买了 10 台笔记本
    (4, 5, 3, 6, "2024-01-18"),  # 钱七买了 6 把办公椅
    (5, 2, 4, 5, "2024-01-19"),  # 李四买了 5 台显示器
]

# executemany 批量插入，比逐条 insert 高效得多
cursor.executemany("INSERT IGNORE INTO employees VALUES (%s,%s,%s,%s,%s)", employees_data)
cursor.executemany("INSERT IGNORE INTO products  VALUES (%s,%s,%s,%s,%s)", products_data)
cursor.executemany("INSERT IGNORE INTO orders     VALUES (%s,%s,%s,%s,%s)", orders_data)

conn.commit()
conn.close()

print("✅ 数据库初始化完成")
print("   - employees 表：5 条员工记录")
print("   - products  表：4 条产品记录")
print("   - orders    表：5 条订单记录")