import { z } from 'zod'
import type { ResolutionTemplate } from './index.js'
import {
  baseDocument,
  escapeHtml,
  formatDateDe,
  formatEur,
  renderMembers,
} from './shared.js'

const schema = z.object({
  sellerName: z.string().min(2),
  buyerName: z.string().min(2),
  buyerAddress: z.string().min(2),
  shareAmount: z.coerce.number().positive(),
  totalSharesAfter: z.coerce.number().nonnegative(),
  purchasePrice: z.coerce.number().nonnegative(),
  effectiveDate: z.string().min(8),
  notes: z.string().optional(),
})

export const shareTransferApproval: ResolutionTemplate = {
  key: 'share_transfer_approval',
  titleDe: 'Genehmigung der Anteilsübertragung',
  titleEn: 'Share transfer approval',
  descriptionDe:
    'Gesellschafterbeschluss zur Genehmigung der Übertragung von Geschäftsanteilen gemäß § 15 GmbHG i.V.m. der Satzung. Die Übertragung selbst ist beurkundungspflichtig.',
  schema,
  fields: [
    { key: 'sellerName', labelDe: 'Veräußerer', labelEn: 'Seller', type: 'text', required: true },
    { key: 'buyerName', labelDe: 'Erwerber', labelEn: 'Buyer', type: 'text', required: true },
    { key: 'buyerAddress', labelDe: 'Anschrift des Erwerbers', labelEn: 'Buyer address', type: 'textarea', required: true },
    { key: 'shareAmount', labelDe: 'Übertragener Anteil (EUR Nennbetrag)', labelEn: 'Transferred share (EUR nominal)', type: 'currency', required: true },
    { key: 'totalSharesAfter', labelDe: 'Anteile des Erwerbers nach Übertragung (EUR Nennbetrag)', labelEn: 'Buyer total shares after transfer (EUR nominal)', type: 'currency', required: true },
    { key: 'purchasePrice', labelDe: 'Kaufpreis (EUR)', labelEn: 'Purchase price (EUR)', type: 'currency', required: true },
    { key: 'effectiveDate', labelDe: 'Wirksam ab', labelEn: 'Effective date', type: 'date', required: true },
    { key: 'notes', labelDe: 'Anmerkungen', labelEn: 'Notes', type: 'textarea' },
  ],
  render: ({ values, company, members, createdBy, date }) => {
    const v = schema.parse(values)
    const body = `
      <h1>Gesellschafterbeschluss</h1>
      <div class="meta">
        ${escapeHtml(company.name)}${company.registryNo ? `, ${escapeHtml(company.registryNo)}` : ''}<br/>
        ${company.address ? escapeHtml(company.address) + '<br/>' : ''}
        Beschlussdatum: ${escapeHtml(formatDateDe(date))}
      </div>
      <div class="section">
        <h2>Gegenstand des Beschlusses</h2>
        <p>Genehmigung der Übertragung eines Geschäftsanteils im Nennbetrag von
        <strong>${escapeHtml(formatEur(v.shareAmount))}</strong> von
        <strong>${escapeHtml(v.sellerName)}</strong> auf
        <strong>${escapeHtml(v.buyerName)}</strong> gemäß § 15 GmbHG
        in Verbindung mit der Satzung der Gesellschaft.</p>
      </div>
      <div class="section">
        <h2>Beschluss</h2>
        <ul>
          <li>Veräußerer: <strong>${escapeHtml(v.sellerName)}</strong></li>
          <li>Erwerber: <strong>${escapeHtml(v.buyerName)}</strong>, ${escapeHtml(v.buyerAddress)}</li>
          <li>Übertragener Anteil (Nennbetrag): <strong>${escapeHtml(formatEur(v.shareAmount))}</strong></li>
          <li>Kaufpreis: <strong>${escapeHtml(formatEur(v.purchasePrice))}</strong></li>
          <li>Anteile des Erwerbers nach Übertragung (Nennbetrag): <strong>${escapeHtml(formatEur(v.totalSharesAfter))}</strong></li>
          <li>Wirksam ab: <strong>${escapeHtml(formatDateDe(v.effectiveDate))}</strong></li>
        </ul>
        <p>Die Wirksamkeit der Übertragung setzt eine notarielle Beurkundung des
        Übertragungsvertrages gemäß § 15 Abs. 3 GmbHG voraus. Die
        Geschäftsführung wird angewiesen, eine aktualisierte Gesellschafterliste
        beim Handelsregister einzureichen.</p>
        ${v.notes ? `<p><em>${escapeHtml(v.notes)}</em></p>` : ''}
      </div>
      <div class="section">
        <h2>Gesellschafter</h2>
        ${renderMembers(members)}
      </div>
      <div class="section signature">
        <div class="line">${escapeHtml(createdBy.displayName)}<br/><small>${escapeHtml(createdBy.email)}</small></div>
        <div class="line">Ort, Datum</div>
      </div>
    `
    return baseDocument('Beschluss – Anteilsübertragung', body)
  },
}
