<script setup lang="ts">
import PageLayout from '../../layouts/PageLayout.vue'
import CrudWorkspaceLayout from '../../layouts/CrudWorkspaceLayout.vue'
import StandardScreenBoundary from './StandardScreenBoundary.vue'
import type { StandardScreenProps } from '../../contracts/screenContract'

const props = defineProps<StandardScreenProps>()
defineEmits<{ retry: [] }>()
</script>

<template>
  <PageLayout :title="props.title" :subtitle="props.subtitle" :status="props.state" :as-of="props.evidence?.asOf" :version="props.evidence?.version">
    <template #actions><slot name="actions" /></template>
    <template #summary><slot name="summary" /></template>
    <template #filters><slot name="filters" /></template>
    <StandardScreenBoundary :state="props.state" :warning="props.warning" :stale-at="props.evidence?.asOf" @retry="$emit('retry')">
      <CrudWorkspaceLayout>
        <slot />
        <template v-if="$slots.detail" #aside><slot name="detail" /></template>
      </CrudWorkspaceLayout>
    </StandardScreenBoundary>
    <template v-if="$slots.footer" #footer><slot name="footer" /></template>
  </PageLayout>
</template>
