esta funcion es muy larga y tiene bastante code duplication. Deberiamos hacer refactoring pa separar el codigo que se repite y hacer la funcion mas legible y mantenible. Agrega documentation pa entender los casos que la funcion cubre