// 规则页纯逻辑：四级合并展示、请求体组装、级别文案。
// 对齐 C3 扩（GET/POST .../rules）。纯逻辑，便于 node 环境单测。

import type { RuleCreateRequest, RuleView } from "@/lib/api/types";

// 四级规则（global→genre→style→project，越具体越优先；对齐后端 RuleCreateRequest Literal）。
export type RuleLevel = "global" | "genre" | "style" | "project";

export const RULE_LEVELS: readonly RuleLevel[] = [
  "global",
  "genre",
  "style",
  "project",
] as const;

export const RULE_LEVEL_LABELS: Record<RuleLevel, string> = {
  global: "全局",
  genre: "题材",
  style: "文风",
  project: "本作",
};

export function isRuleLevel(v: string): v is RuleLevel {
  return (
    v === "global" || v === "genre" || v === "style" || v === "project"
  );
}

export type RuleGroups = Record<RuleLevel, RuleView[]>;

function emptyGroups(): RuleGroups {
  return { global: [], genre: [], style: [], project: [] };
}

// 按 level 分组（未知 level 落 project 兜底，保持服务端顺序）。
export function groupByLevel(
  rules: readonly RuleView[] | undefined,
): RuleGroups {
  const groups = emptyGroups();
  for (const rule of rules ?? []) {
    const level = isRuleLevel(rule.level) ? rule.level : "project";
    groups[level] = [...groups[level], rule];
  }
  return groups;
}

// 组装新增规则请求体（去空白）。
export function buildRuleCreateRequest(
  level: RuleLevel,
  content: string,
): RuleCreateRequest {
  return { level, content: content.trim() };
}

// 内容是否可提交（非空白）。
export function hasUsableContent(content: string): boolean {
  return content.trim().length > 0;
}
