function venteManager(initialClientOptions) {
    return {
        showModal: false,
        showDetailModal: false,
        showClientModal: false,
        selectedItem: null,
        detailReference: '',
        clientOptions: initialClientOptions || [],
        clientForm: {
            nom: '',
            telephone: '',
            adresse: '',
            caution: 0
        },
        form: {
            client_id: '',
            produit_id: '',
            magasin_id: '',
            quantite: 1,
            montant: 0,
            mode_paiement: '',
            statut_paiement: 'en_attente',
            montant_paye: 0,
        },
        formatPrice(n) {
            return new Intl.NumberFormat('fr-FR').format(n) + ' FCFA';
        },
        getStatutLabel(s) {
            const labels = {
                paye: 'Payé',
                partiellement: 'Partiellement',
                en_attente: 'En attente'
            };
            return labels[s] || s;
        },
        getStatutClass(s) {
            const classes = {
                paye: 'bg-emerald-100 text-emerald-700',
                partiellement: 'bg-amber-100 text-amber-700',
                en_attente: 'bg-slate-100 text-slate-700'
            };
            return classes[s] || 'bg-slate-100 text-slate-600';
        },
        onStatutChange() {
            if (this.form.statut_paiement === 'paye') this.form.montant_paye = this.form.montant;
            else if (this.form.statut_paiement === 'en_attente') this.form.montant_paye = 0;
        },
        init() {
            this.$watch('form.statut_paiement', () => this.onStatutChange());
        },
        openModal() {
            this.form = {
                client_id: '',
                produit_id: '',
                magasin_id: '',
                quantite: 1,
                montant: 0,
                mode_paiement: '',
                statut_paiement: 'en_attente',
                montant_paye: 0,
            };
            this.showModal = true;
            this.$nextTick(() => this.$el.dispatchEvent(new CustomEvent('form-reset', {
                bubbles: true,
                detail: {
                    formId: 'vente-form'
                }
            })));
        },
        openNewClientModal() {
            this.clientForm = {
                nom: '',
                telephone: '',
                adresse: '',
                caution: 0
            };
            this.showClientModal = true;
        },
        async saveNewClient() {
            if (!this.clientForm.nom || !this.clientForm.telephone) {
                alert('Le nom et le téléphone sont obligatoires.');
                return;
            }
            if (!this.clientForm.caution || this.clientForm.caution <= 0) {
                alert('La caution est obligatoire pour un nouveau client.');
                return;
            }
            try {
                const csrf = document.querySelector('meta[name="csrf-token"]') ? .content;
                const res = await fetch('{{ route("ventes.store-client") }}', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                        'Accept': 'application/json',
                        'X-CSRF-TOKEN': csrf,
                        'X-Requested-With': 'XMLHttpRequest',
                    },
                    body: JSON.stringify(this.clientForm),
                });
                if (!res.ok) {
                    const data = await res.json().catch(() => ({}));
                    alert(data.message || 'Erreur lors de la création du client.');
                    return;
                }
                const newClient = await res.json();
                this.clientOptions = [...this.clientOptions, {
                    value: newClient.id,
                    label: newClient.nom
                }];
                this.form.client_id = newClient.id;
                this.showClientModal = false;
            } catch (e) {
                alert('Erreur réseau. Veuillez réessayer.');
            }
        },
        viewVente(item) {
            this.selectedItem = item;
            this.detailReference = item.reference;
            this.showDetailModal = true;
        }
    };
}