// 示例：如何使用 AkSupa 的 executeAs<T>() 类型转换功能

// 定义数据类型
export type User = {
	id: number;
	name: string;
	email: string;
	created_at: string;
	avatar_url?: string;
}

export type Post = {
	id: number;
	title: string;
	content: string;
	user_id: number;
	created_at: string;
	updated_at: string;
}

// 使用示例
import AkSupa from '@/components/supadb/aksupa.uts';

export async function demonstrateTypedQueries() {
	const supa = new AkSupa('https://your-project.supabase.co', 'your-anon-key');

	// 1. 查询数据 - 使用链式调用 + executeAs<T>()
	const usersResult = await supa
		.from('users')
		.select('*')
		.eq('status', 'active')
		.limit(10)
		.executeAs<User[]>();
	
	// 现在 usersResult.data 是 User[] 类型，而不是 UTSJSONObject
	if (usersResult.data != null) {
		usersResult.data.forEach(user => {
			console.log(`用户: ${user.name}, 邮箱: ${user.email}`);
		});
	}

	// 2. 单条记录查询
	const userResult = await supa
		.from('users')
		.select('*')
		.eq('id', 1)
		.single()
		.executeAs<User>();
	
	if (userResult.data != null) {
		console.log(`用户名: ${userResult.data.name}`);
	}

	// 3. 插入数据
	const newUser = {
		name: '新用户',
		email: 'newuser@example.com'
	} as UTSJSONObject;
	
	const insertResult = await supa
		.from('users')
		.insert(newUser)
		.executeAs<User[]>();

	// 4. 更新数据
	const updateResult = await supa
		.from('users')
		.update({ name: '更新的名称' } as UTSJSONObject)
		.eq('id', 1)
		.executeAs<User[]>();

	// 5. 删除数据
	const deleteResult = await supa
		.from('users')
		.delete()
		.eq('id', 1)
		.executeAs<User[]>();

	// 6. RPC 调用
	const rpcResult = await supa
		.from('') // RPC 不需要 table
		.rpc('get_user_stats', { user_id: 1 } as UTSJSONObject)
		.executeAs<{ total_posts: number; total_likes: number }>();

	// 7. 复杂查询示例
	const complexQuery = await supa
		.from('posts')
		.select('*, users!posts_user_id_fkey(*)')
		.eq('status', 'published')
		.gt('created_at', '2024-01-01')
		.order('created_at', { ascending: false })
		.limit(20)
		.executeAs<Post[]>();

	return {
		users: usersResult.data,
		user: userResult.data,
		newUser: insertResult.data,
		updated: updateResult.data,
		deleted: deleteResult.data,
		stats: rpcResult.data,
		posts: complexQuery.data
	};
}

// 平台兼容性说明：
// 
// Android 平台（uni-app x 3.90+）：
// - 使用 UTSJSONObject.parse() 进行真正的类型转换
// - 数据会被正确解析为指定的类型 T
// - 如果转换失败，会 fallback 到原始数据
//
// 其他平台（Web、iOS、HarmonyOS）：
// - 使用 as 进行类型断言
// - 这只是 TypeScript 编译时的类型提示，运行时仍然是原始数据
// - 但提供了更好的开发体验和类型安全
//
// 使用优势：
// 1. 统一的 API - 只需要记住 executeAs<T>() 一个方法
// 2. 链式调用 - 可以和所有其他方法组合使用
// 3. 类型安全 - 编译时类型检查，运行时类型转换（Android）
// 4. 简洁明了 - 不需要多个 selectAs/insertAs/updateAs 等方法
