<script setup lang="ts">
const islandProps = ref({
  bool: true,
  number: 100,
  str: 'helo world',
  obj: { json: 'works' }
})

const showIslandSlot = ref(false)
const routeIslandVisible = ref(false)
const testCount = ref(0)
const count = ref(0)
</script>

<template>
  <div>
    Pure island component:
    <div class="box">
      <NuxtIsland name="PureComponent" :props="islandProps" />
      <NuxtIsland name="PureComponent" :props="islandProps" />
    </div>
    <button id="increase-pure-component" @click="islandProps.number++">
      Increase
    </button>
    <hr>
    Route island component:
    <div v-if="routeIslandVisible" class="box">
      <NuxtIsland name="RouteComponent" :context="{ url: '/test' }" />
    </div>
    <button v-else id="show-route" @click="routeIslandVisible = true">
      Show
    </button>

    <p>async .server component</p>
    <AsyncServerComponent :count="count">
      <div id="slot-in-server">
        Slot with in .server component
      </div>
    </AsyncServerComponent>
    <div>
      Async component (1000ms):
      <div>
        <NuxtIsland name="LongAsyncComponent" :props="{ count }">
          <div>Interactive testing slot</div>
          <div id="first-sugar-counter">
            <SugarCounter :multiplier="testCount" />
          </div>
          <template #test="scoped">
            <div id="test-slot">
              Slot with name test - scoped data {{ scoped }}
            </div>
          </template>
          <template #hello="scoped">
            <div id="test-slot">
              Slot with name hello - scoped data {{ scoped }}
            </div>
          </template>
        </NuxtIsland>
        <button id="update-server-components" @click="count++">
          add +1 to count
        </button>
      </div>
    </div>
    <div>
      <p>Island with props mounted client side</p>
      <button id="show-island" @click="showIslandSlot = true">
        Show Interactive island
      </button>
      <div id="island-mounted-client-side">
        <NuxtIsland v-if="showIslandSlot" name="LongAsyncComponent" :props="{ count }">
          <div>Interactive testing slot post SSR</div>
          <SugarCounter :multiplier="testCount" />
        </NuxtIsland>
      </div>
    </div>
  </div>
</template>

<style scoped>
.box {
  border: 1px solid black;
  margin: 3px;
  display: flex;
}
</style>
