---
import { getRecursiveSchemaObject, type Properties, type SchemaObject } from '../../libs/schemaObject'
import Key from '../Key.astro'

import Schema, { type HideSchemaExampleProps } from './SchemaObject.astro'
import SchemaObjectRecursive from './SchemaObjectRecursive.astro'

interface Props extends HideSchemaExampleProps {
  parents: SchemaObject[]
  properties: Properties
  required: string[] | undefined
}

const { hideExample, parents, properties, required } = Astro.props
---

{
  Object.entries(properties).map(([name, schema]) => {
    const recursiveSchemaObject = getRecursiveSchemaObject(schema, parents)

    return (
      <Key name={name} required={required?.includes(name)}>
        {recursiveSchemaObject ? (
          <SchemaObjectRecursive {recursiveSchemaObject} schemaObject={schema} />
        ) : (
          <Schema {hideExample} parents={parents} nested schemaObject={schema} />
        )}
      </Key>
    )
  })
}
