58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
import { FunctionDeclaration, Type } from '@google/genai';
|
|
import { StorageService } from '../services/storageService';
|
|
|
|
export const REWARDS_TOOLS: FunctionDeclaration[] = [
|
|
{
|
|
name: 'check_karma_balance',
|
|
parameters: {
|
|
type: Type.OBJECT,
|
|
description: 'Checks the user\'s current Karma points balance.',
|
|
properties: {}
|
|
}
|
|
},
|
|
{
|
|
name: 'redeem_reward_item',
|
|
parameters: {
|
|
type: Type.OBJECT,
|
|
description: 'Redeems a reward item from the Karma Bazaar.',
|
|
properties: {
|
|
keyword: { type: Type.STRING, description: 'Keyword of the item (e.g., "tree", "dog", "gold frame").' }
|
|
},
|
|
required: ['keyword']
|
|
}
|
|
}
|
|
];
|
|
|
|
export const executeRewardsTool = async (name: string, args: any, navigate: (path: string) => void) => {
|
|
if (name === 'check_karma_balance') {
|
|
const p = await StorageService.getProfile();
|
|
return { result: `You currently have ${p?.points || 0} Karma points.` };
|
|
}
|
|
|
|
if (name === 'redeem_reward_item') {
|
|
const key = args.keyword.toLowerCase();
|
|
let itemId = '';
|
|
let cost = 0;
|
|
|
|
// Simple keyword mapping for demo purposes
|
|
if (key.includes('dog')) { itemId = 'donate_dog'; cost = 100; }
|
|
else if (key.includes('tree')) { itemId = 'donate_tree'; cost = 250; }
|
|
else if (key.includes('orphan')) { itemId = 'donate_orphan'; cost = 1000; }
|
|
else if (key.includes('gold') && key.includes('frame')) { itemId = 'frame_gold'; cost = 200; }
|
|
else if (key.includes('adventurer')) { itemId = 'pack_adventurer'; cost = 500; }
|
|
|
|
if (itemId) {
|
|
const res = await StorageService.redeemReward(itemId, cost);
|
|
if (res.success) {
|
|
navigate('/rewards');
|
|
return { result: `Successfully redeemed ${args.keyword}. Karma deducted.` };
|
|
} else {
|
|
return { result: `Redemption failed: ${res.error}` };
|
|
}
|
|
}
|
|
|
|
return { result: `I couldn't find a reward item matching "${args.keyword}". Try visiting the Bazaar.` };
|
|
}
|
|
|
|
return null;
|
|
}; |