# Configuración en Windows — Guía paso a paso

Esta guía está pensada para configurar el proyecto desde cero en Windows sin conocimientos previos de desarrollo.

---

## Requisitos previos

### 1. Instalar Python

1. Entrar a [python.org/downloads](https://www.python.org/downloads/)
2. Descargar la versión más reciente (3.11 o superior)
3. Ejecutar el instalador
4. **Importante:** marcar la casilla **"Add Python to PATH"** antes de hacer clic en Install Now

![Add Python to PATH](https://www.python.org/static/img/python-logo.png)

Para verificar que quedó instalado, abrir **PowerShell** y ejecutar:
```powershell
python --version
```
Debe mostrar algo como `Python 3.13.0`. Si aparece un error, reiniciar la computadora e intentar de nuevo.

---

### 2. Instalar Git

1. Entrar a [git-scm.com/download/win](https://git-scm.com/download/win)
2. Descargar el instalador y ejecutarlo con todas las opciones por defecto
3. Al terminar quedan instalados tanto **Git** como **Git Bash** — Git Bash se usa más adelante para compilar los archivos proto

Para verificar, abrir **PowerShell** y ejecutar:
```powershell
git --version
```
Debe mostrar algo como `git version 2.47.0.windows.2`

---

### 3. Instalar VS Code (recomendado)

Editor de texto recomendado para editar el archivo `.env` y trabajar con el proyecto.

1. Entrar a [code.visualstudio.com](https://code.visualstudio.com/)
2. Descargar e instalar con las opciones por defecto

---

## Instalación del proyecto

### Paso 1 — Obtener el código

Abrir **PowerShell**, navegar a la carpeta donde quieras alojar el proyecto y ejecutar:
```powershell
git clone <repo-url>
cd nube_bcknd
```

> Si no sabes cómo navegar en PowerShell: `cd C:\Users\TuUsuario\Documents` te lleva a Documentos, por ejemplo.

---

### Paso 2 — Crear el entorno virtual

El entorno virtual aisla las dependencias del proyecto para que no interfieran con otros programas de Python en tu computadora.

```powershell
python -m venv venv
```

Luego activarlo:
```powershell
venv\Scripts\activate
```

Sabrás que el entorno está activo cuando la línea del terminal empiece con `(venv)`:
```
(venv) PS C:\Users\TuUsuario\Documents\nube_bcknd>
```

> Si PowerShell muestra un error de permisos al activar, ejecuta primero:
> ```powershell
> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
> ```
> Luego intenta activar de nuevo.

---

### Paso 3 — Instalar dependencias

Con el entorno virtual activo:
```powershell
pip install -r requirements
```

Verás cómo se descargan e instalan los paquetes. Al terminar sin errores puedes continuar.

---

### Paso 4 — Configurar variables de entorno

Crear el archivo `.env` a partir de la plantilla:
```powershell
copy .env.example .env
```

Abrir el archivo `.env` con VS Code:
```powershell
code .env
```

Completar los valores con los datos proporcionados por el equipo:
```env
GRPC_CLOUD_SERVICES_DAO_HOST=servidor:50051
GRPC_CLOUD_SERVICES_DAO_CERT=certs/ca.crt
INTERNAL_API_KEY=clave-proporcionada-por-el-equipo
```

Guardar el archivo con `Ctrl + S`.

> El archivo `.env` contiene información sensible. No compartirlo ni subirlo al repositorio.

---

### Paso 5 — Colocar el certificado TLS

Crear la carpeta `certs` dentro del proyecto:
```powershell
mkdir certs
```

Copiar el archivo `ca.crt` (proporcionado por el equipo) dentro de esa carpeta. Al terminar debe verse así:
```
nube_bcknd/
└── certs/
    └── ca.crt
```

---

### Paso 6 — Compilar los archivos proto

Este paso genera el código necesario para comunicarse con el servidor gRPC. Debe ejecutarse desde **Git Bash** (no desde PowerShell).

Abrir **Git Bash**:
- Buscar "Git Bash" en el menú Inicio
- O hacer clic derecho en la carpeta del proyecto y seleccionar **"Open Git Bash here"**

Una vez dentro de Git Bash, instalar la herramienta de compilación (solo la primera vez):
```bash
pip install grpcio-tools
```

Compilar:
```bash
bash compile_proto.sh
```

Si todo salió bien verás el mensaje:
```
Stubs generados en app/grpc/generated
```

---

### Paso 7 — Levantar el servidor

De vuelta en **PowerShell** con el entorno virtual activo:
```powershell
python main.py
```

Abrir el navegador y entrar a:
```
http://localhost:8000/docs
```

Si aparece la documentación interactiva de la API, el servidor está funcionando correctamente.

Para detener el servidor usar `Ctrl + C` en PowerShell.

---

## Consideraciones importantes en Windows

### Saltos de línea
El repositorio incluye un archivo `.gitattributes` que fuerza el formato de línea correcto al clonar en Windows. No requiere ninguna acción manual, pero si por alguna razón `compile_proto.sh` falla con un error como `\r: command not found`, ejecutar esto en Git Bash para corregirlo:
```bash
sed -i 's/\r//' compile_proto.sh
```

### Encoding del archivo .env
Al editar el `.env` con el Bloc de notas de Windows, guardarlo como **UTF-8** (no UTF-8 con BOM). En VS Code esto es automático. En el Bloc de notas seleccionar `Archivo → Guardar como → Codificación: UTF-8`.

### Soporte para rutas largas
En algunas versiones de Windows la instalación de paquetes Python puede fallar si la ruta del proyecto es muy larga. Para habilitarlo, abrir PowerShell **como administrador** y ejecutar:
```powershell
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
  -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
```
Reiniciar la computadora para que tome efecto.

---

## Problemas comunes

| Problema | Solución |
|---|---|
| `python` no se reconoce como comando | Reinstalar Python marcando "Add Python to PATH" |
| Error de permisos al activar el venv | Ejecutar `Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser` |
| `pip` no encuentra los paquetes | Verificar que el entorno virtual esté activo — debe verse `(venv)` al inicio de la línea |
| `\r: command not found` al compilar proto | Ejecutar `sed -i 's/\r//' compile_proto.sh` en Git Bash |
| Error al compilar el proto | Asegurarse de usar Git Bash, no PowerShell |
| No abre `http://localhost:8000/docs` | Verificar que el servidor esté corriendo y no haya errores en la terminal |
| Error de ruta demasiado larga al instalar paquetes | Habilitar soporte de rutas largas (ver sección de consideraciones) |
