import { pgTable, timestamp, varchar, integer, jsonb, boolean } from "drizzle-orm/pg-core";

// ---------------------------------------------------------------------------
// 峰谷电价配置 / Time-of-Use Tariff
// ---------------------------------------------------------------------------

/**
 * 时段-电价类型映射
 * "peak" 峰时 | "valley" 谷时 | "flat" 平时
 */
export type PriceTier = "peak" | "valley" | "flat";

/**
 * 电价时段（紧凑格式）
 * start：起始小时（含，0–23）
 * end：结束小时（不含，1–24）
 * 示例：{ start: 8, end: 12, tier: "peak" } 表示 08:00–12:00 为峰时
 */
export type TariffSlot = {
  start: number;
  end: number;
  tier: PriceTier;
};

/**
 * 峰谷电价配置表（单例，通过 isActive 标记当前生效的版本）
 *
 * 价格以整数"分"存储（1 分 = 0.01 CNY），精度 0.01 元/kWh：
 *   fen = Math.round(CNY * 100)
 *   CNY = fen / 100
 *
 * 时段列表存储为 JSONB（TariffSlot[]）。
 * 若无任何 isActive=true 的记录，计费逻辑将回退到 chargePoint.feePerKwh 平均电价。
 */
export const tariff = pgTable("tariff", {
  id: varchar("id").primaryKey(),
  /** 24 小时时段列表（紧凑格式，TariffSlot[]） */
  slots: jsonb("slots").notNull().$type<TariffSlot[]>(),
  /** 峰时电价（分/kWh） */
  peakElectricityPrice: integer("peak_electricity_price").notNull().default(0),
  /** 峰时服务费（分/kWh） */
  peakServiceFee: integer("peak_service_fee").notNull().default(0),
  /** 谷时电价（分/kWh） */
  valleyElectricityPrice: integer("valley_electricity_price").notNull().default(0),
  /** 谷时服务费（分/kWh） */
  valleyServiceFee: integer("valley_service_fee").notNull().default(0),
  /** 平时电价（分/kWh） */
  flatElectricityPrice: integer("flat_electricity_price").notNull().default(0),
  /** 平时服务费（分/kWh） */
  flatServiceFee: integer("flat_service_fee").notNull().default(0),
  /** 是否为当前生效配置（同时只允许一条 isActive=true） */
  isActive: boolean("is_active").notNull().default(true),
  createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
  updatedAt: timestamp("updated_at", { withTimezone: true })
    .notNull()
    .defaultNow()
    .$onUpdate(() => new Date()),
});
