import { z } from "zod";

// 基础用户 schema
export const baseUserSchema = z.object({
  id: z.string(),
  name: z.string().optional(),
  email: z.string(),
  password: z.string().optional(),
  role: z.string().optional(),
  createdAt: z.string(),
  updatedAt: z.string().optional(),
});

// 基础添加用户 schema
export const baseAddUserSchema = z.object({
  name: z.string().min(1, "姓名为必填项"),
  email: z.string().email("请输入有效的邮箱地址"),
  password: z.string().min(8, "密码长度8-32位").max(32, "密码长度8-32位"),
  createdAt: z.string(),
});

// 基础编辑用户 schema
export const baseEditUserSchema = z.object({
  id: z.string(),
  name: z.string().min(1, "姓名为必填项"),
  email: z.string().email("请输入有效的邮箱地址"),
  password: z.string().min(8, "密码长度8-32位").max(32, "密码长度8-32位"),
  createdAt: z.string(),
});

// 基础表格列配置
export const baseColumns = [
  { key: "id", label: "ID", sortable: true },
  {
    key: "name",
    label: "姓名",
    sortable: true,
    searchable: true,
    placeholder: "搜索姓名",
  },
  {
    key: "email",
    label: "邮箱",
    sortable: true,
    searchable: true,
    placeholder: "搜索邮箱",
  },
  { key: "createdAt", label: "创建时间", sortable: true },
];

// 基础表单字段配置
export const baseFormFields = [
  {
    key: "name",
    label: "姓名",
    type: "text",
    placeholder: "请输入姓名",
    required: true,
  },
  {
    key: "email",
    label: "邮箱",
    type: "email",
    placeholder: "请输入邮箱",
    required: true,
  },
  {
    key: "password",
    label: "密码",
    type: "password",
    placeholder: "请输入8-32位密码",
    required: true,
  },
  {
    key: "createdAt",
    label: "创建时间",
    type: "datetime-local",
    required: false,
  },
];

// 基础操作配置
export const baseActions = {
  add: { label: "添加", icon: "PlusIcon" },
  edit: { label: "编辑", icon: "PencilIcon" },
  delete: { label: "删除", icon: "TrashIcon" },
  batchDelete: { label: "批量删除", icon: "TrashIcon" },
};

// 基础分页配置
export const basePagination = {
  pageSizes: [10, 50, 100, 500],
  defaultPageSize: 10,
};

// 创建用户配置的工厂函数
export function createUserConfig(
  resourceType: string,
  title: string,
  addLabel: string,
  namePlaceholder: string,
  emailPlaceholder: string
) {
  return {
    resourceType,
    title,
    apiPath: "/api/user",
    columns: baseColumns,
    formFields: baseFormFields.map((field) => ({
      ...field,
      placeholder:
        field.key === "name"
          ? namePlaceholder
          : field.key === "email"
          ? emailPlaceholder
          : field.placeholder,
    })),
    actions: {
      ...baseActions,
      add: { ...baseActions.add, label: addLabel },
    },
    pagination: basePagination,
  };
}
