import { CircleCheck, Handshake } from "lucide-react";
import Link from "next/link";
import { useState } from "react";
import toast from "react-hot-toast";
import { AllegatoIframe } from "~/components/allegato-iframe";
import { LoadingPage } from "~/components/loading";
import { getStorageUrl } from "~/lib/storage_utils";
import { useTranslation } from "~/providers/I18nProvider";
import { useServizio, useServizioAnnuncio } from "~/providers/ServizioProvider";
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
import type { UsersStorageUserStorageId } from "~/schemas/public/UsersStorage";
import { api } from "~/utils/api";
import { DocumentiUploadSection } from "../area-riservata/documenti_personali";
import {
Credenza,
CredenzaBody,
CredenzaClose,
CredenzaContent,
CredenzaDescription,
CredenzaFooter,
CredenzaHeader,
CredenzaTitle,
CredenzaTrigger,
} from "../custom_ui/credenza";
import LoadingButton from "../custom_ui/loading-button";
import { Button } from "../ui/button";
export const FileSection = ({ storageId }: { storageId: string }) => {
const { data: fileInfos, isLoading } = api.storage.getFileInfos.useQuery({
storageId,
});
const { t } = useTranslation();
if (isLoading) return ;
if (!fileInfos) return
{t.file_section.error}
;
return (
<>
{t.file_section.download}
>
);
};
export const ConfermaAnnuncioModal = () => {
const { servizio } = useServizio();
const { t } = useTranslation();
const [open, setOpen] = useState(false);
const needsDocuments =
!servizio.skipDocMotivazione &&
!servizio.doc_motivazione &&
servizio.tipologia === TipologiaPosizioneEnum.Transitorio;
return (
<>
{t.richieste.cta}
{t.richieste.conf_title}
{t.richieste.conf_desc}
{needsDocuments ? (
) : (
setOpen(false)} />
)}
>
);
};
const InvioConferma = ({ closeModal }: { closeModal: () => void }) => {
const { userId, servizioId } = useServizio();
const { annuncioId } = useServizioAnnuncio();
const { t } = useTranslation();
const utils = api.useUtils();
const { mutate, isPending } = api.servizio.userSendConfermaIntent.useMutation(
{
onError: (err) => {
toast.error(err.message, { id: "updateRichiestaToast" });
},
onMutate: () => {
toast.loading("Conferma in corso", { id: "updateRichiestaToast" });
},
onSuccess: async () => {
toast.success("Richiesta confermata con successo", {
id: "updateRichiestaToast",
});
await utils.servizio.getAllServizioAnnunci.invalidate({ userId });
await utils.servizio.getServizioData.invalidate({ servizioId });
closeModal();
},
},
);
return (
<>
{t.richieste.conferma_txt}
{t.richieste.conf_alert}
{
mutate({
annuncioId,
servizioId,
});
}}
variant="success"
>
{t.conferma}
{t.chiudi}
>
);
};
const DocCheckpoint = () => {
const { t, locale } = useTranslation();
const { userId, servizio, isAdmin, servizioId } = useServizio();
const utils = api.useUtils();
const { mutate, isPending } = api.servizio.updateServizio.useMutation({
onSuccess: async () => {
await utils.servizio.getAllServizioAnnunci.invalidate({
userId,
});
await utils.servizio.getServizioData.invalidate({servizioId});
await utils.storage.retrieveUserFileData.invalidate({ userId });
await utils.servizio.getServizio.invalidate({
servizioId: servizio.servizio_id,
});
await utils.servizio.getPacksSolution.invalidate({ servizioId });
},
onError: (err) => {
toast.error(`Errore aggiornamento servizio: ${err.message}`);
},
});
const handleUpload = (id: UsersStorageUserStorageId) => {
mutate({
servizioId: servizio.servizio_id,
data: { doc_motivazione_ref: id },
});
};
return (
<>
{locale === "it"
? "Devi ancora caricare un tuo documento legato alla permanenza e motivazione di transitorietà"
: "You still need to upload a document related to your stay and reason for transience"}
{locale === "it"
? "I tuoi dati saranno conservati solamente per la durata del servizio, in conformità con la nostra "
: "Your data will be stored only for the duration of the service, in accordance with our "}
{locale === "it" ? "Informativa sulla Privacy" : "Privacy Policy"}
{t.chiudi}
>
);
};
export const ConfermaInLavorazioneModal = () => {
const { t, locale } = useTranslation();
const { data } = useServizioAnnuncio();
return (
{locale === "it"
? "Conferma in lavorazione"
: "Confirmation in progress"}
{locale === "it"
? "In attesa di conferma"
: "Awaiting confirmation"}
Consegna status modal
{locale === "it"
? "Richiesta di conferma inviata il:"
: "Confirmation request sent on:"}{" "}
{data.user_confirmed_at &&
new Date(data.user_confirmed_at).toLocaleString("it", {
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
month: "2-digit",
year: "numeric",
})}
{locale === "it"
? "La conferma è ancora in lavorazione. Stiamo verificando con i proprietari le condizioni e dettagli della conferma per riferirteli. Attendi una comunicazione."
: "The confirmation is still in progress. We are checking with the owners the conditions and details of the confirmation to report them to you. Please wait for a communication."}
{t.chiudi}
);
};