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

const schema = z.object({
  appointeeName: z.string().min(2),
  appointeeAddress: z.string().min(2),
  effectiveDate: z.string().min(8),
  soleRepresentation: z.coerce.boolean().optional(),
  selfDealingExempt: z.coerce.boolean().optional(),
})

export const mdAppointment: ResolutionTemplate = {
  key: 'md_appointment',
  titleDe: 'Beschluss zur Bestellung eines Geschäftsführers',
  titleEn: 'Managing director appointment',
  descriptionDe:
    'Gesellschafterbeschluss zur Bestellung einer Person zum Geschäftsführer der Gesellschaft.',
  schema,
  fields: [
    { key: 'appointeeName', labelDe: 'Name des Geschäftsführers', labelEn: 'Appointee name', type: 'text', required: true },
    { key: 'appointeeAddress', labelDe: 'Anschrift', labelEn: 'Address', type: 'textarea', required: true },
    { key: 'effectiveDate', labelDe: 'Wirksam ab', labelEn: 'Effective date', type: 'date', required: true },
    { key: 'soleRepresentation', labelDe: 'Einzelvertretungsbefugnis', labelEn: 'Sole representation', type: 'text' },
    { key: 'selfDealingExempt', labelDe: 'Befreiung von § 181 BGB', labelEn: 'Exempt from § 181 BGB', type: 'text' },
  ],
  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>Bestellung von <strong>${escapeHtml(v.appointeeName)}</strong>,
        ${escapeHtml(v.appointeeAddress)}, zum Geschäftsführer der Gesellschaft
        mit Wirkung zum <strong>${escapeHtml(formatDateDe(v.effectiveDate))}</strong>.</p>
      </div>
      <div class="section">
        <h2>Beschluss</h2>
        <ul>
          <li>${escapeHtml(v.appointeeName)} wird zum Geschäftsführer bestellt.</li>
          ${v.soleRepresentation ? '<li>Einzelvertretungsbefugnis wird erteilt.</li>' : ''}
          ${v.selfDealingExempt ? '<li>Befreiung von den Beschränkungen des § 181 BGB wird erteilt.</li>' : ''}
        </ul>
      </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 – Bestellung Geschäftsführer', body)
  },
}
