File size: 2,664 Bytes
b66ef35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import { db } from './index';
import type { GameState, Encounter, EncounterType } from './schema';

// Initialize or get game state
export async function getOrCreateGameState(): Promise<GameState> {
  const states = await db.gameState.toArray();
  
  if (states.length > 0) {
    // Update last played
    await db.gameState.update(states[0].id!, { lastPlayed: new Date() });
    return states[0];
  }
  
  // Create initial game state
  const newState: Omit<GameState, 'id'> = {
    lastEncounterRefresh: new Date(),
    lastPlayed: new Date(),
    progressPoints: 0,
    trainersDefeated: 0,
    picletsCapured: 0,
    battlesLost: 0
  };
  
  const id = await db.gameState.add(newState);
  return { ...newState, id };
}

// Update progress
export async function updateProgress(updates: Partial<GameState>): Promise<void> {
  const state = await getOrCreateGameState();
  await db.gameState.update(state.id!, updates);
}

// Increment specific counters
export async function incrementCounter(counter: 'trainersDefeated' | 'picletsCapured' | 'battlesLost'): Promise<void> {
  const state = await getOrCreateGameState();
  await db.gameState.update(state.id!, {
    [counter]: state[counter] + 1
  });
}

// Add progress points
export async function addProgressPoints(points: number): Promise<void> {
  const state = await getOrCreateGameState();
  const newPoints = Math.min(1000, state.progressPoints + points);
  await db.gameState.update(state.id!, {
    progressPoints: newPoints
  });
}

// Create a new encounter
export async function createEncounter(encounter: Omit<Encounter, 'id' | 'createdAt'>): Promise<number> {
  return await db.encounters.add({
    ...encounter,
    createdAt: new Date()
  });
}

// Get recent encounters
export async function getRecentEncounters(limit: number = 10): Promise<Encounter[]> {
  return await db.encounters
    .orderBy('createdAt')
    .reverse()
    .limit(limit)
    .toArray();
}

// Get encounters by type
export async function getEncountersByType(type: EncounterType): Promise<Encounter[]> {
  return await db.encounters
    .where('type')
    .equals(type)
    .toArray();
}

// Check if should refresh encounters (e.g., every hour)
export async function shouldRefreshEncounters(): Promise<boolean> {
  const state = await getOrCreateGameState();
  const hoursSinceRefresh = (Date.now() - state.lastEncounterRefresh.getTime()) / (1000 * 60 * 60);
  return hoursSinceRefresh >= 1;
}

// Mark encounters as refreshed
export async function markEncountersRefreshed(): Promise<void> {
  const state = await getOrCreateGameState();
  await db.gameState.update(state.id!, {
    lastEncounterRefresh: new Date()
  });
}