DataScope26/WEB
0
1import { useState, useEffect } from "react";2import { patchCompany, deleteCompany, uploadCompanyLogo } from "../services/apiCompanies.js";3import { getCookie } from "../utils/cookieUtils";4 5export const useCompanySettings = (selectedCompany) => {6 const [legalName, setLegalName] = useState("");7 const [saving, setSaving] = useState(false);8 const [deleting, setDeleting] = useState(false);9 const [statusMessage, setStatusMessage] = useState(null);10 const [errorMessage, setErrorMessage] = useState(null);11 const [uploadingLogo, setUploadingLogo] = useState(false);12 13 // Initialize form from selected company14 useEffect(() => {15 if (!selectedCompany) return;16 17 setLegalName(selectedCompany.name || "");18 19 setStatusMessage(null);20 setErrorMessage(null);21 }, [selectedCompany]);22 23 const handleDiscard = () => {24 if (!selectedCompany) return;25 26 setLegalName(selectedCompany.name || "");27 28 setStatusMessage(null);29 setErrorMessage(null);30 };31 32 const handleSave = async (onSuccess) => {33 setStatusMessage(null);34 setErrorMessage(null);35 36 if (!selectedCompany) return;37 38 // Validate name contains at least 1 letter39 const hasLetter = /[a-zA-Z]/.test(legalName);40 if (!hasLetter) {41 setErrorMessage("El nombre de la empresa debe contener al menos una letra.");42 return;43 }44 45 const token =46 sessionStorage.getItem("token") ||47 localStorage.getItem("token") ||48 getCookie("datascope_token");49 50 if (!token) {51 setErrorMessage("No hay sesión activa.");52 return;53 }54 55 const companyId =56 selectedCompany.id || selectedCompany.companyId;57 58 if (!companyId) {59 setErrorMessage("No se encontró el ID de la empresa.");60 return;61 }62 63 const payload = {64 name: legalName,65 };66 67 try {68 setSaving(true);69 70 const response = await patchCompany(71 token,72 companyId,73 payload74 );75 76 const updatedCompany =77 response?.data?.company ||78 response?.data ||79 response ||80 {81 ...selectedCompany,82 ...payload,83 };84 85 setStatusMessage("Guardado correctamente.");86 87 if (onSuccess) {88 onSuccess(updatedCompany);89 }90 } catch (err) {91 console.error(92 "Error al guardar company settings:",93 err94 );95 96 setErrorMessage(97 err?.response?.data?.message ||98 err?.message ||99 "No se pudo guardar. Intentá de nuevo."100 );101 } finally {102 setSaving(false);103 }104 };105 106 const handleDelete = async (onSuccess) => {107 setStatusMessage(null);108 setErrorMessage(null);109 110 if (!selectedCompany) return;111 112 const token =113 sessionStorage.getItem("token") ||114 localStorage.getItem("token") ||115 getCookie("datascope_token");116 117 if (!token) {118 setErrorMessage("No hay sesión activa.");119 return;120 }121 122 const companyId =123 selectedCompany.id || selectedCompany.companyId;124 125 if (!companyId) {126 setErrorMessage("No se encontró el ID de la empresa.");127 return;128 }129 130 try {131 setDeleting(true);132 133 const response = await deleteCompany(token, companyId);134 135 setStatusMessage("Empresa eliminada correctamente.");136 137 if (onSuccess) {138 onSuccess(response);139 }140 } catch (err) {141 console.error(142 "Error al eliminar company:",143 err144 );145 146 setErrorMessage(147 err?.response?.data?.message ||148 err?.message ||149 "No se pudo eliminar. Intentá de nuevo."150 );151 } finally {152 setDeleting(false);153 }154 155 156 157 158 159 };160 161 const handleLogoUpload = async (file, onSuccess) => {162 setStatusMessage(null);163 setErrorMessage(null);164 165 if (!selectedCompany || !file) return;166 167 const token =168 sessionStorage.getItem("token") ||169 localStorage.getItem("token") ||170 getCookie("datascope_token");171 172 if (!token) {173 setErrorMessage("No hay sesión activa.");174 return;175 }176 177 const companyId = selectedCompany.id || selectedCompany.companyId;178 if (!companyId) {179 setErrorMessage("No se encontró el ID de la empresa.");180 return;181 }182 183 try {184 setUploadingLogo(true);185 186 const { company: updatedCompany } = await uploadCompanyLogo(token, companyId, file);187 188 setStatusMessage("Logo actualizado correctamente.");189 190 if (onSuccess && updatedCompany) {191 onSuccess(updatedCompany);192 }193 } catch (err) {194 console.error("Error al subir el logo:", err);195 setErrorMessage(err?.message || "No se pudo subir el logo. Intentá de nuevo.");196 } finally {197 setUploadingLogo(false);198 }199 };200 201 return {202 legalName,203 setLegalName,204 saving,205 deleting,206 statusMessage,207 errorMessage,208 handleDiscard,209 handleSave,210 handleDelete,211 handleLogoUpload,212 };213};214 