File size: 1,895 Bytes
0dc7194
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/**
 * Modulo del simulador de posiciones virtuales.
 *
 * Responsabilidades:
 *   - init(state)              → recibe referencia al estado global de app.js.
 *   - openPosition(...)        → crea posicion via API POST /positions.
 *   - closePosition(id)        → cierra posicion via API DELETE /positions/:id.
 *
 * Flujo openPosition:
 *   1. Valida cantidad > 0.
 *   2. Obtiene precio de entrada del mercado actual.
 *   3. POST /api/v1/positions → si 2xx, actualiza estado.
 *   4. Si API falla → muestra error al usuario.
 *
 * Eventos:
 *   - Emite CustomEvent 'positions:changed' para que app.js re-renderice.
 *
 * Consumido por:
 *   - app.js → botones "COMPRAR SI/NO" en el panel de detalle.
 */

import * as api from './api.js'

let appState = null

export function init(state) {
  appState = state
}

export async function openPosition(marketId, outcome, amount) {
  const amt = parseFloat(amount)
  if (!amt || amt <= 0) {
    alert('Introduce una cantidad válida')
    return
  }

  const m = appState.markets.find((x) => x.id === marketId)
  if (!m) return

  const entryPrice = outcome === 'YES' ? m.yesPrice : m.noPrice
  const data = {
    marketId,
    outcome,
    amountEur: amt,
    entryPrice,
  }

  try {
    const created = await api.createPosition(data)
    appState.positions.push(created)
    document.dispatchEvent(new CustomEvent('positions:changed'))
  } catch (e) {
    console.error('Error abriendo posicion:', e)
    alert('No se pudo abrir la posición. ¿Has iniciado sesión?')
  }
}

export async function closePosition(positionId) {
  try {
    await api.closePosition(positionId)
    appState.positions = appState.positions.filter((p) => p.id !== positionId)
    document.dispatchEvent(new CustomEvent('positions:changed'))
  } catch (e) {
    console.error('Error cerrando posicion:', e)
    alert('No se pudo cerrar la posición')
  }
}