import type { Page, PageFile, ProjectJson } from './types'

/** 生成下一个页面 ID：P-001、P-002… */
export function nextPageId(pages: Page[]): string {
  const ids = pages.map((p) => p.id)
  let n = pages.length + 1
  while (ids.includes('P-' + String(n).padStart(3, '0'))) n++
  return 'P-' + String(n).padStart(3, '0')
}

/** 解析大屏页面最终 URL（支持 http(s)、file、相对路径、about:blank） */
export function resolvePageUrl(p: Page): string {
  if (p.url === 'about:blank' || p.url === '') return 'about:blank'
  try {
    const u = new URL(p.url, window.location.href)
    return u.href
  } catch {
    return 'about:blank'
  }
}

/** 生成带参数的大屏页面 URL（no / title / 自定义 params） */
export function pageSrc(p: Page): string {
  const base = resolvePageUrl(p)
  if (base === 'about:blank') return 'about:blank'
  try {
    const u = new URL(base)
    if (p.params) {
      p.params.split('\n').forEach((line) => {
        const eq = line.indexOf('=')
        if (eq > 0) {
          const k = line.slice(0, eq).trim()
          const v = line.slice(eq + 1).trim()
          if (k) u.searchParams.set(k, v)
        }
      })
    }
    if (!u.searchParams.has('no')) u.searchParams.set('no', p.id.replace(/\D/g, '') || '0')
    if (!u.searchParams.has('title')) u.searchParams.set('title', p.title)
    return u.href
  } catch {
    return 'about:blank'
  }
}

export function pagesToJson(pages: Page[], meta?: { appName?: string; version?: string }): ProjectJson {
  return {
    appName: meta?.appName || '智慧农业大数据可视化控制中心',
    version: meta?.version || '0.1.0',
    pages: pages.map((p) => ({
      PageID: p.id,
      PageTitle: p.title,
      PageDescribe: p.desc,
      ScreenIndex: p.screen,
      ControllerIndex: p.ctrl,
      IsDisplay: p.display,
      PageUrl: p.url,
      PageParams: p.params,
      PagePreview: p.preview || ''
    }))
  }
}

export function jsonToPages(json: ProjectJson): Page[] {
  const list = Array.isArray(json.pages) ? json.pages : []
  if (list.length === 0) return []
  return list.map((f: PageFile, i) => ({
    id: String(f.PageID ?? 'P-' + String(i + 1).padStart(3, '0')),
    title: String(f.PageTitle ?? '页面 ' + (i + 1)),
    desc: String(f.PageDescribe ?? ''),
    screen: Number(f.ScreenIndex) || 1,
    ctrl: Number(f.ControllerIndex) || 0,
    display: f.IsDisplay !== false,
    url: String(f.PageUrl ?? 'about:blank'),
    params: String(f.PageParams ?? ''),
    preview: f.PagePreview || undefined
  }))
}

export function defaultPages(): Page[] {
  return [
    { id: 'P-001', title: '农业数据总览', desc: '全基地农业数据总览', screen: 1, ctrl: 1, display: true, url: 'sample-screen.html', params: 'no=1\ntitle=农业数据总览' },
    { id: 'P-002', title: '土壤墒情监测', desc: '土壤湿度与墒情分析', screen: 2, ctrl: 2, display: true, url: 'sample-screen.html', params: 'no=2\ntitle=土壤墒情监测' },
    { id: 'P-003', title: '温室环境监控', desc: '温室内环境参数实时监控', screen: 3, ctrl: 3, display: true, url: 'sample-screen.html', params: 'no=3\ntitle=温室环境监控' },
    { id: 'P-004', title: '设备运维看板', desc: '灌溉设备运维状态', screen: 1, ctrl: 4, display: true, url: 'sample-screen.html', params: 'no=4\ntitle=设备运维看板' }
  ]
}
