/**
 * Feishu/Lark OAuth scope definitions for Forge.
 *
 * These scopes are requested during OAuth Device Flow (user authorization).
 * They must be enabled in the Feishu developer console (权限管理) first,
 * otherwise the OAuth request will be rejected.
 *
 * Scope source: lark-cli auth login --recommend (110 scopes) +
 * additional scopes needed by Forge that --recommend doesn't cover.
 *
 * Grouped by business domain for clarity.
 * Each entry corresponds to a Feishu Open Platform permission key.
 */

export const FORGE_FEISHU_SCOPES = [
  // ── Calendar
  'calendar:calendar:read',
  'calendar:calendar:create',
  'calendar:calendar:update',
  'calendar:calendar:delete',
  'calendar:calendar.event:read',
  'calendar:calendar.event:create',
  'calendar:calendar.event:update',
  'calendar:calendar.event:delete',
  'calendar:calendar.free_busy:read',

  // ── IM / Messenger
  'im:chat:read',
  'im:chat:update',
  'im:chat.members:read',
  'im:chat.members:write_only',
  'im:message:readonly',
  'im:message:send',
  'im:message:recall',
  'im:message.pins:read',
  'im:message.pins:write_only',
  'im:message.reactions:read',
  'im:message.reactions:write_only',
  'im:message.group_msg:get_as_user',
  'im:message.p2p_msg:get_as_user',

  // ── Docs (docx)
  'docx:document',
  'docx:document:readonly',
  'docx:document:write_only',
  'docx:document:create',
  'docs:document:export',
  'docs:document:copy',
  'docs:document.comment:read',
  'docs:document.comment:create',
  'docs:document.comment:update',
  'docs:document.comment:delete',
  'docs:document.comment:write_only',
  'docs:document.media:download',
  'docs:document.media:upload',
  'docs:event:subscribe',
  'docs:permission.member:auth',
  'docs:permission.member:create',
  'docs:permission.member:transfer',

  // ── Drive
  'drive:drive',
  'drive:drive:readonly',
  'drive:drive.metadata:readonly',
  'drive:file:download',
  'drive:file:upload',

  // ── Search
  'search:docs:read',

  // ── Contact
  'contact:user.base:readonly',
  'contact:user.basic_profile:readonly',
  'contact:user:search',

  // ── Task
  'task:task:read',
  'task:task:write',
  'task:tasklist:read',
  'task:tasklist:write',
  'task:comment:write',

  // ── Base (multi-dim table)
  'base:app:read',
  'base:app:create',
  'base:app:copy',
  'base:app:update',
  'base:table:read',
  'base:table:create',
  'base:table:update',
  'base:table:delete',
  'base:record:read',
  'base:record:create',
  'base:record:update',
  'base:record:delete',
  'base:field:read',
  'base:field:create',
  'base:field:update',
  'base:field:delete',
  'base:view:read',
  'base:view:write_only',
  'base:form:read',
  'base:form:create',
  'base:form:update',
  'base:form:delete',
  'base:dashboard:read',
  'base:dashboard:create',
  'base:dashboard:update',
  'base:dashboard:delete',
  'base:role:read',
  'base:role:create',
  'base:role:update',
  'base:role:delete',
  'base:workflow:read',
  'base:workflow:create',
  'base:workflow:update',
  'base:workflow:delete',
  'base:workspace:list',

  // ── Wiki
  'wiki:node:read',
  'wiki:node:create',
  'wiki:node:copy',
  'wiki:node:retrieve',
  'wiki:space:read',
  'wiki:space:retrieve',
  'wiki:space:write_only',
  'space:document:retrieve',

  // ── Sheets
  'sheets:spreadsheet:read',
  'sheets:spreadsheet:write_only',
  'sheets:spreadsheet:create',
  'sheets:spreadsheet.meta:read',
  'sheets:spreadsheet.meta:write_only',

  // ── Whiteboard
  'board:whiteboard:node:create',
  'board:whiteboard:node:delete',
  'board:whiteboard:node:read',
  'board:whiteboard:node:update',

  // ── Mail
  'mail:user_mailbox:readonly',
  'mail:user_mailbox.message:readonly',
  'mail:user_mailbox.message:modify',
  'mail:user_mailbox.message.subject:read',
  'mail:user_mailbox.message.body:read',
  'mail:user_mailbox.message.address:read',
  'mail:user_mailbox.mail_contact:read',
  'mail:user_mailbox.mail_contact:write',
  'mail:event',

  // ── Video Conference
  'vc:meeting.search:read',
  'vc:meeting.meetingevent:read',
  'vc:note:read',

  // ── Minutes (Feishu Lark Minutes / 妙记)
  // NOTE: minutes:minutes.media:export requires approval in the Feishu dev console.
  'minutes:minutes.search:read',
  'minutes:minutes.basic:read',
  'minutes:minutes:update',
  'minutes:minutes.media:export',

  // ── Auth (required for refresh_token)
  'offline_access',
]

/** Space-separated scope string for OAuth requests */
export const FORGE_FEISHU_SCOPE_STRING = FORGE_FEISHU_SCOPES.join(' ')
