<template>
  <TransitionRoot as="template" :show="open">
    <Dialog as="div" static
            class="fixed z-[1000] inset-0 overflow-y-auto" :open="open"
            @close="closeAction"
    >
      <div class="flex items-center justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0">
        <TransitionChild as="template" enter="ease-out duration-300"
                         enter-from="opacity-0" enter-to="opacity-100"
                         leave="ease-in duration-200" leave-from="opacity-100"
                         leave-to="opacity-0"
        >
          <DialogOverlay class="fixed inset-0 bg-indigo-200 bg-opacity-75 transition-opacity" />
        </TransitionChild>

        <span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">&#8203;</span>
        <TransitionChild as="template" enter="ease-out duration-300"
                         enter-from="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95" enter-to="opacity-100 translate-y-0 sm:scale-100"
                         leave="ease-in duration-200" leave-from="opacity-100 translate-y-0 sm:scale-100"
                         leave-to="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
        >
          <div class="inline-block align-bottom bg-indigo-300 rounded-lg px-4 pt-5 pb-4 text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle w-full sm:max-w-lg sm:w-full sm:p-6">
            <div class="sm:flex sm:items-center">
              <div class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-orange sm:mx-0 sm:h-10 sm:w-10">
                <ChatIcon class="h-6 w-6 text-red-600" aria-hidden="true" />
              </div>
              <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
                <DialogTitle as="h3" class="text-lg leading-6 font-medium text-gray-light">
                  Новое сообщение
                </DialogTitle>
              </div>
              <div v-if="showDialogLink" class="ml-auto">
                <a href="#" class="underline text-gray text-xs"
                   @click.prevent="linkTo"
                >перейти в чат</a>
              </div>
            </div>
            <div class="mt-5">
              <textarea ref="textarea" v-model="form.message"
                        rows="3"
                        name="comment" class="outline-none focus:ring-orange-dark focus:border-transparent focus:ring-offset-0 bg-indigo-200 text-white max-h-56 block w-full py-3 border-0 resize-none sm:text-sm"
                        placeholder="Сообщение ..."
              />
            </div>
            <div class="mt-5 sm:mt-4 sm:flex sm:flex-row space-x-3 justify-end">
              <button type="button"
                      class="my-1 transition shadow-none hover:shadow-classic inline-flex items-center px-6 py-2 justify-center  text-base rounded-md text-white bg-indigo-300 focus:outline-none"
                      @click="closeAction"
              >
                Отменить
              </button>
              <button type="button"
                      class="my-1 transition shadow-none hover:shadow-classic inline-flex items-center px-6 py-2 justify-center  text-base rounded-md text-white bg-green focus:outline-none"
                      @click="submit"
              >
                Отправить
              </button>
            </div>
          </div>
        </TransitionChild>
      </div>
    </Dialog>
  </TransitionRoot>
</template>

<script>
import {
    Dialog,
    DialogOverlay,
    DialogTitle,
    TransitionChild,
    TransitionRoot,
} from '@headlessui/vue'
import { ChatIcon } from '@heroicons/vue/outline'
import { ref } from 'vue'
import { useAutoresizeTextarea } from '@/includes/composables'
import axios from 'axios'
import { useForm } from '@inertiajs/inertia-vue3'
import { Inertia } from '@inertiajs/inertia'

export default {
    components: {
        Dialog,
        DialogOverlay,
        DialogTitle,
        TransitionChild,
        TransitionRoot,
        ChatIcon,
    },

    setup(props, {expose}) {

        const form = useForm({
            message: null,
            chat_room: null,
            user_id: null,
        })

        const textarea = ref()
        const user = ref()
        const open = ref(false)
        const chatCheck = ref(false)
        const showDialogLink = ref(false)

        const openAction = (extUser) => {
            open.value = true
            user.value = extUser
            form.user_id = extUser.id
            if(!chatCheck.value){
                exsistChatRequest(user.value)
            }
        }
        const closeAction = () => {
            open.value = false
        }

        const exsistChatRequest = (user) => {
            chatCheck.value = true
            axios.post('/messenger-check-room', {
                params: {
                    user: user.id,
                }
            }).then(response => {
                if(response.data > 0){
                    showDialogLink.value = 1
                    form.chat_room = response.data
                }
            })
        }

        const submit = () => {
            if(!form.message){
                alert('Введите сообщение')
                return
            }
            if(form.chat_room){
                createMessage()
            }else{
                createRoom()
            }
        }

        const createMessage = () => {
            form.post(route('messenger.store.profile'), {
                onSuccess: () => {
                    closeAction()
                    form.message = ''
                    linkTo()
                },
            })
        }

        const createRoom = () => {
            form.post(route('messenger.create.room'), {
                onSuccess: () => {
                    closeAction()
                    showDialogLink.value = 1
                    form.message = ''
                    linkTo()
                },
            })
        }


        const linkTo = () => {
            Inertia.visit(`/messenger?user=${user.value.username}`, { method: 'get' })
        }

        useAutoresizeTextarea(textarea)

        expose({
            openAction
        })

        return {
            form,
            textarea,
            open,
            closeAction,
            user,
            showDialogLink,
            submit,
            linkTo,
        }
    },
}
</script>
