# yaml-language-server: $schema=https://unpkg.com/@sveltia/cms@0.265.2/schema/sveltia-cms.json
#
# Sveltia CMS 配置。字段与 src/content.config.ts 里的 schema 一一对应，
# 改动 schema 时记得同步这里，否则后台存出来的文章会在构建时报错。
#
# 当前内容直接提交到 fa1nes/blog 的 main 分支。

backend:
  name: github
  repo: fa1nes/blog
  branch: main
  # 登录方式一：GitHub OAuth（推荐）。base_url 指向 workers/cms-auth 部署出的代理，
  # 后台登录页会出现「使用 GitHub 登录」，不需要手工创建 PAT。
  # 登录方式二：令牌登录。保留在 auth_methods 里，OAuth 服务不可用时仍可进。
  base_url: https://fa1nes-blog-cms-auth.fa1ne.workers.dev
  auth_methods: [oauth, token]
  # 提交信息模板，让仓库历史能看出是从后台改的
  commit_messages:
    create: '内容：新增 {{collection}}「{{slug}}」'
    update: '内容：更新 {{collection}}「{{slug}}」'
    delete: '内容：删除 {{collection}}「{{slug}}」'
    uploadMedia: '内容：上传图片 {{path}}'
    deleteMedia: '内容：删除图片 {{path}}'

# CMS 上传的图片存到 public/uploads，引用路径是 /uploads/xxx。
#
# 为什么不直接存 src/assets：Astro 的图片优化要求用相对于文章的路径引用，
# 而 Sveltia 的 public_folder 必须是以 / 开头的绝对路径，两者无法同时满足。
# 所以这里分成两条路 —— 后台上传走 public/uploads（不压缩但随时可用），
# 手写文章想要自动压缩就把图片放进 src/assets 并用相对路径引用。
# 两种写法 cover 字段都支持，详见 README。
media_folder: /public/uploads
public_folder: /uploads

# 后台默认使用简易工作流：保存即提交到 main 分支，随后 CI 自动部署
publish_mode: simple

# 后台入口页面根据本次构建的 site/base 注入地址，避免部署子路径或域名变更后预览失效。
# 保留这两个键供 setup 命令同步；CMS.init 传入的运行配置具有更高优先级。
site_url: ''
display_url: ''
app_title: fa1nes 的博客 · 内容工作台
logo:
  src: ../favicon.png
  show_in_header: true
show_preview_links: true

collections:
  - name: posts
    label: 文章
    label_singular: 文章
    description: 撰写、预览和发布博客文章
    folder: /src/content/posts
    create: true
    extension: md
    format: yaml-frontmatter
    # 文件名取「网址别名」字段，保证生成英文网址
    slug: '{{fields.slug}}'
    preview_path: 'posts/{{fields.slug}}'
    identifier_field: title
    summary: '{{title}} · {{pubDate}} · {{category}}'
    search_fields: [title, description, category, tags, body]
    sortable_fields: [pubDate, title, category]
    view_groups:
      - label: 按分类
        field: category
    fields:
      - label: 标题
        name: title
        widget: string

      - label: 网址别名
        name: slug
        widget: string
        required: true
        hint: 只用小写英文、数字和连字符，它会成为文章网址，例如 hello-world
        pattern: ['^(?!(?:con|prn|aux|nul|com[1-9]|lpt[1-9])$)[a-z0-9]+(?:-[a-z0-9]+)*$', '只能包含小写英文、数字和连字符，且不能使用系统保留文件名']

      - label: 摘要
        name: description
        widget: text
        required: false
        hint: 用于列表、搜索结果与分享卡片。留空会自动截取正文开头

      - label: 发布日期
        name: pubDate
        widget: datetime
        format: 'YYYY-MM-DD'
        date_format: 'YYYY-MM-DD'
        time_format: false
        picker_utc: false

      - label: 更新日期
        name: updatedDate
        widget: datetime
        required: false
        format: 'YYYY-MM-DD'
        date_format: 'YYYY-MM-DD'
        time_format: false
        picker_utc: false

      - label: 分类
        name: category
        widget: string
        required: false
        default: 未分类
        hint: 一篇文章只属于一个分类

      - label: 标签
        name: tags
        widget: list
        required: false
        default: []
        hint: 回车分隔，可以有多个

      - label: 封面图
        name: cover
        widget: image
        required: false
        choose_url: false
        hint: 上传到 public/uploads，文章页显示大图，列表页显示为缩略图

      - label: 封面图说明
        name: coverAlt
        widget: string
        required: false
        hint: 供读屏软件使用，留空则用文章标题

      - label: 草稿
        name: draft
        widget: boolean
        default: false
        hint: 勾选后本地可以预览，但不会出现在正式站点上

      - label: 置顶
        name: pinned
        widget: boolean
        default: false

      - label: 显示目录
        name: toc
        widget: boolean
        default: true

      - label: 开启评论
        name: comments
        widget: boolean
        default: true

      - label: 正文
        name: body
        widget: markdown

  - name: notes
    label: 动态
    label_singular: 动态
    description: 发布简短近况、摘录和随手记录
    folder: /src/content/notes
    create: true
    extension: md
    format: yaml-frontmatter
    # 日期便于查找，UUID 避免同一分钟新建多条动态时文件名冲突。
    slug: '{{year}}-{{month}}-{{day}}-{{hour}}{{minute}}-{{uuid}}'
    summary: '{{pubDate}} · {{body}}'
    sortable_fields: [pubDate]
    fields:
      - label: 发布时间
        name: pubDate
        widget: datetime
        format: 'YYYY-MM-DDTHH:mm:ssZ'
        date_format: 'YYYY-MM-DD'
        time_format: 'HH:mm'
        input_timezone: Asia/Taipei
        output_utc: true

      - label: 心情 / 话题
        name: mood
        widget: string
        required: false
        hint: 显示在时间旁边，比如「随手记」「读到」

      - label: 标签
        name: tags
        widget: list
        required: false
        default: []

      - label: 草稿
        name: draft
        widget: boolean
        default: false

      - label: 内容
        name: body
        widget: markdown

  - name: friends
    label: 友情链接
    label_singular: 友链
    description: 管理友链站点、头像与展示顺序
    folder: /src/content/friends
    create: true
    extension: md
    format: yaml-frontmatter
    slug: '{{fields.name}}'
    summary: '{{name}} — {{description}}'
    sortable_fields: [order, name]
    fields:
      - { label: 站点名, name: name, widget: string }
      - label: 站点地址
        name: href
        widget: string
        type: url
        pattern: ['^https?://.+', '需要以 http:// 或 https:// 开头']
      - label: 一句话描述
        name: description
        widget: text
        required: false
      - label: 头像
        name: avatar
        widget: image
        required: false
        choose_url: true
        hint: 留空时会用站点名首字生成占位头像
      - label: 排序
        name: order
        widget: number
        default: 0
        value_type: int
        hint: 数字小的排在前面
      # 友链没有正文，但内容集合的文件需要有个 body 位置
      - { label: 备注, name: body, widget: text, required: false }

  - name: pages
    label: 独立页面
    label_singular: 页面
    description: 编辑关于等固定页面
    folder: /src/content/pages
    create: false
    extension: md
    format: yaml-frontmatter
    fields:
      - { label: 标题, name: title, widget: string }
      - { label: 摘要, name: description, widget: text, required: false }
      - label: 更新日期
        name: updatedDate
        widget: datetime
        required: false
        format: 'YYYY-MM-DD'
        date_format: 'YYYY-MM-DD'
        time_format: false
        picker_utc: false
      - { label: 正文, name: body, widget: markdown }
