import type { Block } from 'payload' export const FDServiceCalculatorBlock: Block = { slug: 'fdServiceCalculator', imageURL: '/block-thumbnails/fd-vps-calculator.png', imageAltText: 'FD Tjänstekalkylator', interfaceName: 'FDServiceCalculatorBlock', labels: { singular: 'FD Tjänstekalkylator', plural: 'FD Tjänstekalkylatorer' }, fields: [ // ─── Presentation ────────────────────────────────────────────────────── { name: 'heading', type: 'text', label: 'Rubrik', defaultValue: 'Beräkna din kostnad', }, { name: 'description', type: 'text', label: 'Beskrivning (valfri)', }, { name: 'summaryHeading', type: 'text', label: 'Rubrik — kostnadsöversikt', defaultValue: 'Kostnadsöversikt', }, { name: 'totalLabel', type: 'text', label: 'Total-etikett', defaultValue: 'Totalt per månad', }, { name: 'totalSuffix', type: 'text', label: 'Suffix under totalen', defaultValue: 'exkl. moms', }, { type: 'row', fields: [ { name: 'orderCtaText', type: 'text', label: 'Beställ-knapp text', defaultValue: 'Beställ' }, { name: 'orderCtaLink', type: 'text', label: 'Beställ-länk', defaultValue: '/kontakt' }, ], }, { type: 'row', fields: [ { name: 'contactCtaText', type: 'text', label: 'Kontakt-knapp text', defaultValue: 'Frågor? Kontakta oss' }, { name: 'contactCtaLink', type: 'text', label: 'Kontakt-länk', defaultValue: '/kontakt' }, ], }, { name: 'sectionBackground', type: 'select', label: 'Bakgrundsfärg', defaultValue: 'white', options: [ { label: 'Vit', value: 'white' }, { label: 'Grå', value: 'gray' }, { label: 'Navy (mörkt)', value: 'navy' }, ], }, // ─── Option groups (e.g. OS selector, tier picker) ───────────────────── { name: 'optionGroups', type: 'array', label: 'Alternativgrupper', admin: { description: 'T.ex. "Operativsystem" med Linux/Windows, eller "Nivå" med Standard/Premium. Visas som knappar.', }, fields: [ { name: 'groupLabel', type: 'text', label: 'Gruppnamn', required: true }, { name: 'options', type: 'array', label: 'Alternativ', minRows: 2, fields: [ { name: 'label', type: 'text', label: 'Alternativtext', required: true }, { name: 'price', type: 'number', label: 'Pris (kr/mån)', defaultValue: 0, admin: { description: '0 för gratis (t.ex. Linux)' }, }, ], }, ], }, // ─── Resource sliders (e.g. CPU, RAM, Storage) ───────────────────────── { name: 'resources', type: 'array', label: 'Resurser (reglage)', admin: { description: 'Varje rad blir ett +/- reglage. T.ex. CPU-kärnor, RAM (GB), Lagring (GB).', }, fields: [ { type: 'row', fields: [ { name: 'label', type: 'text', label: 'Namn', required: true }, { name: 'unit', type: 'text', label: 'Enhet', required: true, defaultValue: 'GB', admin: { width: '25%' } }, ], }, { type: 'row', fields: [ { name: 'pricePerUnit', type: 'number', label: 'Pris per enhet (kr)', required: true }, { name: 'defaultValue', type: 'number', label: 'Startvärde', defaultValue: 0 }, ], }, { type: 'row', fields: [ { name: 'min', type: 'number', label: 'Min', defaultValue: 0 }, { name: 'max', type: 'number', label: 'Max', defaultValue: 1000 }, { name: 'step', type: 'number', label: 'Steg', defaultValue: 1 }, ], }, { name: 'summaryTemplate', type: 'text', label: 'Sammanfattningsmall (valfri)', admin: { description: 'Använd {value} och {unit} som variabler. T.ex. "SSD NVMe ({value} {unit})".', }, }, ], }, // ─── Toggle add-ons ──────────────────────────────────────────────────── { name: 'addons', type: 'array', label: 'Tillvalstjänster', admin: { description: 'Kunden kan slå på/av dessa med en toggle.', }, fields: [ { name: 'label', type: 'text', label: 'Tjänstnamn', required: true }, { name: 'price', type: 'number', label: 'Pris (kr/mån)', required: true }, { name: 'description', type: 'text', label: 'Kort beskrivning (valfri)', }, ], }, // ─── Fixed fees ──────────────────────────────────────────────────────── { name: 'fixedFees', type: 'array', label: 'Fasta avgifter', admin: { description: 'Alltid inkluderade i totalen. Kunden kan inte välja bort dessa.', }, fields: [ { name: 'label', type: 'text', label: 'Avgiftsnamn', required: true }, { name: 'amount', type: 'number', label: 'Belopp (kr/mån)', required: true }, ], }, // ─── Discount ────────────────────────────────────────────────────────── { type: 'collapsible', label: 'Kampanjrabatt', admin: { initCollapsed: true }, fields: [ { name: 'discountPercent', type: 'number', label: 'Rabatt (%)', min: 0, max: 100, admin: { description: 'Appliceras på alla resurser och tillval. 0 = ingen rabatt.' }, }, { name: 'discountLabel', type: 'text', label: 'Rabattetikett (visas som badge)', admin: { description: 'T.ex. "{percent}% rabatt på alla resurser". Använd {percent} som variabel.', condition: (_, siblingData) => (siblingData?.discountPercent ?? 0) > 0, }, }, ], }, ], }