import type { Contact } from '~/modules/directory/services/dto/contact' import type { Address } from '~/modules/directory/services/dto/address' import { useContactService } from '~/modules/directory/services/contacts' import { useAddressService } from '~/modules/directory/services/addresses' type Owner = { client?: string, prospect?: string } /** * Logique partagée des fiches détail Client/Prospect : gestion des blocs * répétables Contact et Adresse (chargement, ajout, édition par bloc avec * persistance immédiate, suppression). Paramétré par l'IRI du propriétaire * (`{ client }` ou `{ prospect }`), réutilisé tel quel par les deux pages. */ export function useDirectoryDetail(owner: Owner) { const contactService = useContactService() const addressService = useAddressService() const contacts = ref([]) const addresses = ref([]) function emptyContact(): Contact { return { id: 0, firstName: null, lastName: null, jobTitle: null, email: null, phonePrimary: null, phoneSecondary: null, ...owner } } function emptyAddress(): Address { return { id: 0, label: null, street: null, streetComplement: null, postalCode: null, city: null, country: 'FR', ...owner } } async function onContactInput(index: number, value: Contact): Promise { contacts.value[index] = value await persistContact(index) } async function persistContact(index: number): Promise { const c = contacts.value[index] if (!c) return const payload = { firstName: c.firstName, lastName: c.lastName, jobTitle: c.jobTitle, email: c.email, phonePrimary: c.phonePrimary, phoneSecondary: c.phoneSecondary, ...owner } if (c.id && c.id > 0) { await contactService.update(c.id, payload) } else if (c.lastName || c.firstName) { const created = await contactService.create(payload) contacts.value[index] = created } } function addContact(): void { contacts.value.push(emptyContact()) } async function removeContact(index: number): Promise { const c = contacts.value[index] if (c?.id && c.id > 0) await contactService.remove(c.id) contacts.value.splice(index, 1) } async function onAddressInput(index: number, value: Address): Promise { addresses.value[index] = value await persistAddress(index) } async function persistAddress(index: number): Promise { const a = addresses.value[index] if (!a) return const payload = { label: a.label, street: a.street, streetComplement: a.streetComplement, postalCode: a.postalCode, city: a.city, country: a.country, ...owner } if (a.id && a.id > 0) { await addressService.update(a.id, payload) } else if (a.street || a.city || a.postalCode) { const created = await addressService.create(payload) addresses.value[index] = created } } function addAddress(): void { addresses.value.push(emptyAddress()) } async function removeAddress(index: number): Promise { const a = addresses.value[index] if (a?.id && a.id > 0) await addressService.remove(a.id) addresses.value.splice(index, 1) } async function load(): Promise { contacts.value = await contactService.getByOwner(owner) addresses.value = await addressService.getByOwner(owner) } return { contacts, addresses, onContactInput, addContact, removeContact, onAddressInput, addAddress, removeAddress, load, } }