import satori from 'satori'
import { Resvg } from '@resvg/resvg-js'
import fs from 'node:fs/promises'
import path from 'node:path'
import { fileURLToPath } from 'node:url'

const __dirname = path.dirname(fileURLToPath(import.meta.url))
const FONTS = path.join(__dirname, 'fonts')
const OUT = path.resolve(__dirname, '..', 'public', 'og')

const interReg = await fs.readFile(path.join(FONTS, 'Inter-Regular.ttf'))
const interBold = await fs.readFile(path.join(FONTS, 'Inter-Bold.ttf'))

const pages = [
  { file: 'home.png',     title: 'Программа учёта и касса для розничных магазинов в Казахстане', sub: 'Касса с торговыми весами, импорт каталога, ОФД РК. Бесплатно 90 дней.' },
  { file: 'pos.png',      title: 'Касса для Windows с поддержкой торговых весов',                sub: 'Установка за 5 минут. Офлайн-режим. Стандартное оборудование.' },
  { file: 'pricing.png',  title: 'Прозрачные тарифы Food Market',                                 sub: 'От 5 000 ₸/мес. Все возможности на любом тарифе. 90 дней триал.' },
  { file: 'import.png',   title: 'Перенесите каталог за один клик',                               sub: 'Excel, CSV, REST API. До 100 000 товаров. Бесплатно.' },
  { file: 'about.png',    title: 'О Food Market',                                                  sub: 'Программа учёта розничной торговли, созданная в Казахстане.' },
  { file: 'for-grocery.png',   title: 'Food Market для продуктового магазина',                    sub: 'Весовой товар, скоропорт, штрихкоды, ABC-анализ.' },
  { file: 'for-pharmacy.png',  title: 'Food Market для аптеки',                                    sub: 'Серии, сроки годности, рецептурный отпуск, контроль ЛП.' },
  { file: 'for-cafe.png',      title: 'Food Market для кафе и общепита',                           sub: 'Модификаторы блюд, столики, печать на кухню.' },
  { file: 'for-alcohol.png',   title: 'Food Market для алкомаркета',                               sub: 'Акцизные марки, контроль времени продаж, маркировка.' },
  { file: 'for-clothing.png',  title: 'Food Market для магазина одежды',                           sub: 'Размерные сетки, цветовые матрицы, остатки по размерам.' },
  { file: 'for-household.png', title: 'Food Market для дома и быта',                               sub: 'Гарантийные сроки, серийные номера, характеристики.' },
]

const tmpl = ({ title, sub }) => ({
  type: 'div',
  props: {
    style: {
      width: '1200px', height: '630px', display: 'flex', flexDirection: 'column',
      justifyContent: 'space-between', padding: '64px',
      background: 'linear-gradient(135deg, #ECFDF5 0%, #D1FAE5 60%, #A7F3D0 100%)',
      fontFamily: 'Inter',
    },
    children: [
      // Logo + brand row
      {
        type: 'div',
        props: {
          style: { display: 'flex', alignItems: 'center', gap: '14px' },
          children: [
            {
              type: 'div',
              props: {
                style: {
                  width: '56px', height: '56px', borderRadius: '14px',
                  background: '#00B207',
                  display: 'flex', alignItems: 'center', justifyContent: 'center',
                  color: '#FFFFFF', fontSize: '32px', fontWeight: 700,
                },
                children: 'F',
              },
            },
            {
              type: 'div',
              props: {
                style: { display: 'flex', flexDirection: 'column' },
                children: [
                  { type: 'span', props: { style: { color: '#0F172A', fontSize: '26px', fontWeight: 700, lineHeight: 1 }, children: 'Food Market' } },
                  { type: 'span', props: { style: { color: '#475569', fontSize: '15px', fontWeight: 400, marginTop: '4px' }, children: 'Программа учёта · Касса · Касса для Windows' } },
                ],
              },
            },
          ],
        },
      },
      // Title + subtitle
      {
        type: 'div',
        props: {
          style: { display: 'flex', flexDirection: 'column', gap: '20px', maxWidth: '1000px' },
          children: [
            { type: 'div', props: { style: { color: '#0F172A', fontSize: title.length > 60 ? '54px' : '64px', fontWeight: 700, lineHeight: 1.15 }, children: title } },
            { type: 'div', props: { style: { color: '#475569', fontSize: '28px', fontWeight: 400, lineHeight: 1.3 }, children: sub } },
          ],
        },
      },
      // Footer
      {
        type: 'div',
        props: {
          style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between' },
          children: [
            { type: 'div', props: { style: { color: '#0F172A', fontSize: '20px', fontWeight: 700 }, children: 'food-market.kz' } },
            {
              type: 'div',
              props: {
                style: {
                  background: '#00B207', color: '#FFFFFF',
                  padding: '14px 28px', borderRadius: '10px', fontSize: '20px', fontWeight: 700,
                },
                children: 'Начать бесплатно →',
              },
            },
          ],
        },
      },
    ],
  },
})

await fs.mkdir(OUT, { recursive: true })
for (const p of pages) {
  const svg = await satori(tmpl(p), {
    width: 1200, height: 630,
    fonts: [
      { name: 'Inter', data: interReg, weight: 400, style: 'normal' },
      { name: 'Inter', data: interBold, weight: 700, style: 'normal' },
    ],
  })
  const png = new Resvg(svg, { fitTo: { mode: 'width', value: 1200 } }).render().asPng()
  await fs.writeFile(path.join(OUT, p.file), png)
  console.log('og →', p.file)
}
console.log('done')
