<script lang="ts">
  import {getWalletAddress} from "@welshman/util"
  import {userProfile, session} from "@app/welshman"
  import {errorMessage} from "@lib/util"
  import Button from "@lib/components/Button.svelte"
  import Spinner from "@lib/components/Spinner.svelte"
  import Modal from "@lib/components/Modal.svelte"
  import ModalBody from "@lib/components/ModalBody.svelte"
  import ModalHeader from "@lib/components/ModalHeader.svelte"
  import ModalTitle from "@lib/components/ModalTitle.svelte"
  import ModalFooter from "@lib/components/ModalFooter.svelte"
  import {updateProfile} from "@app/profiles"
  import {clearModals} from "@app/modal"
  import {pushToast} from "@app/toast"

  const lud16 = getWalletAddress($session!.wallet!)

  const confirm = async () => {
    // $userProfile is now a Profile Reader; its raw metadata lives on `.values`.
    const profile = {...($userProfile?.values ?? {}), lud16}

    loading = true

    try {
      const thunk = await updateProfile({profile})
      const error = await thunk.waitForError()

      if (error) {
        pushToast({theme: "error", message: `Failed to update profile: ${errorMessage(error)}`})
      } else {
        clearModals()
      }
    } finally {
      loading = false
    }
  }

  const cancel = () => {
    clearModals()
  }

  let loading = $state(false)
</script>

<Modal>
  <ModalBody>
    <ModalHeader>
      <ModalTitle>Set as Receiving Address?</ModalTitle>
    </ModalHeader>
    {#if $userProfile?.values?.lud16}
      <p>
        Your current receiving address is different from the one provided by your connected wallet.
      </p>
      <p>
        Would you like to update your receiving address to <span class="text-primary">{lud16}</span
        >?
      </p>
    {:else}
      <p>
        You don't currently have a receiving address set, which means other people can't send you
        lightning payments.
      </p>
      <p>Would you like to use the one associated with your connected wallet?</p>
    {/if}
  </ModalBody>
  <ModalFooter>
    <Button class="btn btn-neutral" onclick={cancel} disabled={loading}>No, skip this</Button>
    <Button class="btn btn-primary" onclick={confirm} disabled={loading}>
      <Spinner {loading}>Yes, set as receiving address</Spinner>
    </Button>
  </ModalFooter>
</Modal>
