/**
 * 宠物记录管理工具类
 * 负责记录数据的存储、分类、社交功能等管理
 */

class RecordManager {
	constructor() {
		this.storageKey = 'pet_records'
		this.socialDataKey = 'pet_records_social'
		
		// 记录分类配置
		this.categories = {
			// 一级分类
			health: {
				name: '健康',
				icon: '🏥',
				color: '#4CAF50',
				subCategories: {
					medical: { name: '就医记录', icon: '🏥' },
					checkup: { name: '体检记录', icon: '🔍' },
					vaccine: { name: '疫苗接种', icon: '💉' },
					weight: { name: '体重记录', icon: '⚖️' },
					symptom: { name: '异常症状', icon: '⚠️' },
					medication: { name: '用药记录', icon: '💊' }
				}
			},
			care: {
				name: '护理',
				icon: '🛁',
				color: '#2196F3',
				subCategories: {
					grooming: { name: '洗护美容', icon: '🛁' },
					cleaning: { name: '清洁护理', icon: '🧽' },
					nail: { name: '修剪指甲', icon: '✂️' },
					dental: { name: '口腔护理', icon: '🦷' },
					ear: { name: '耳部清洁', icon: '👂' },
					eye: { name: '眼部护理', icon: '👁️' }
				}
			},
			behavior: {
				name: '行为',
				icon: '🎾',
				color: '#FF9800',
				subCategories: {
					training: { name: '训练记录', icon: '🎯' },
					play: { name: '游戏互动', icon: '🎾' },
					social: { name: '社交活动', icon: '👥' },
					habit: { name: '习惯养成', icon: '📝' },
					milestone: { name: '成长里程碑', icon: '🏆' },
					mood: { name: '情绪状态', icon: '😊' }
				}
			},
			daily: {
				name: '日常',
				icon: '📝',
				color: '#9C27B0',
				subCategories: {
					feeding: { name: '喂食记录', icon: '🍽️' },
					sleep: { name: '睡眠记录', icon: '😴' },
					exercise: { name: '运动记录', icon: '🏃' },
					photo: { name: '拍照记录', icon: '📷' },
					note: { name: '随手记', icon: '📝' },
					weather: { name: '天气记录', icon: '🌤️' }
				}
			},
			expense: {
				name: '消费',
				icon: '💰',
				color: '#F44336',
				subCategories: {
					food: { name: '食物用品', icon: '🍽️' },
					toy: { name: '玩具用品', icon: '🧸' },
					medical: { name: '医疗费用', icon: '🏥' },
					grooming: { name: '美容费用', icon: '✂️' },
					insurance: { name: '保险费用', icon: '🛡️' },
					other: { name: '其他消费', icon: '💰' }
				}
			}
		}
	}

	/**
	 * 获取宠物的所有记录
	 * @param {string} petId 宠物ID
	 * @returns {Array} 记录数组
	 */
	getRecords(petId) {
		try {
			const allRecords = uni.getStorageSync(this.storageKey) || {}
			let records = allRecords[petId] || []
			
			// 如果没有数据，初始化一些测试数据
			if (records.length === 0) {
				records = this.initializeTestData(petId)
				allRecords[petId] = records
				uni.setStorageSync(this.storageKey, allRecords)
			}
			
			return records
		} catch (error) {
			console.error('获取记录失败:', error)
			return this.initializeTestData(petId)
		}
	}

	/**
	 * 初始化测试数据
	 * @param {string} petId 宠物ID
	 * @returns {Array} 测试数据数组
	 */
	initializeTestData(petId) {
		const now = new Date()
		const testData = []
		
		// 健康记录
		testData.push({
			id: Date.now() + 1,
			petId: petId,
			category: 'health',
			subCategory: 'checkup',
			title: '年度体检',
			content: '带小橘去宠物医院做年度体检，医生说各项指标都很正常，身体很健康！',
			recordTime: new Date(now.getTime() - 2 * 24 * 60 * 60 * 1000).toISOString(),
			photos: ['/static/checkup1.jpg', '/static/checkup2.jpg'],
			tags: ['体检', '健康', '正常'],
			location: '宠物医院',
			weather: '晴天',
			mood: 'happy',
			shareLevel: 'family',
			createTime: new Date(now.getTime() - 2 * 24 * 60 * 60 * 1000).toISOString(),
			updateTime: new Date(now.getTime() - 2 * 24 * 60 * 60 * 1000).toISOString()
		})
		
		// 护理记录
		testData.push({
			id: Date.now() + 2,
			petId: petId,
			category: 'care',
			subCategory: 'grooming',
			title: '洗澡美容',
			content: '给小橘洗澡和修剪毛发，全程很乖很配合，洗完后毛毛很蓬松很香！',
			recordTime: new Date(now.getTime() - 5 * 24 * 60 * 60 * 1000).toISOString(),
			photos: ['/static/grooming1.jpg'],
			tags: ['洗澡', '美容', '乖巧'],
			location: '家里',
			weather: '阴天',
			mood: 'calm',
			shareLevel: 'family',
			createTime: new Date(now.getTime() - 5 * 24 * 60 * 60 * 1000).toISOString(),
			updateTime: new Date(now.getTime() - 5 * 24 * 60 * 60 * 1000).toISOString()
		})
		
		// 行为记录
		testData.push({
			id: Date.now() + 3,
			petId: petId,
			category: 'behavior',
			subCategory: 'milestone',
			title: '第一次用猫砂',
			content: '小橘第一次学会用猫砂盆，真是个聪明的小家伙！这是一个重要的成长里程碑。',
			recordTime: new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).toISOString(),
			photos: [],
			tags: ['第一次', '猫砂', '聪明'],
			location: '家里',
			weather: '晴天',
			mood: 'proud',
			shareLevel: 'public',
			createTime: new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).toISOString(),
			updateTime: new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).toISOString()
		})
		
		// 日常记录
		testData.push({
			id: Date.now() + 4,
			petId: petId,
			category: 'daily',
			subCategory: 'note',
			title: '今天很活泼',
			content: '小橘今天特别活泼，一直在客厅里跑来跑去，看起来心情很好！还主动来找我玩。',
			recordTime: new Date(now.getTime() - 1 * 24 * 60 * 60 * 1000).toISOString(),
			photos: ['/static/active1.jpg', '/static/active2.jpg', '/static/active3.jpg'],
			tags: ['活泼', '开心', '互动'],
			location: '家里',
			weather: '晴天',
			mood: 'excited',
			shareLevel: 'family',
			createTime: new Date(now.getTime() - 1 * 24 * 60 * 60 * 1000).toISOString(),
			updateTime: new Date(now.getTime() - 1 * 24 * 60 * 60 * 1000).toISOString()
		})
		
		// 消费记录
		testData.push({
			id: Date.now() + 5,
			petId: petId,
			category: 'expense',
			subCategory: 'food',
			title: '购买猫粮和用品',
			content: '购买了新的猫粮、猫砂和一些玩具，希望小橘会喜欢。',
			recordTime: new Date(now.getTime() - 10 * 24 * 60 * 60 * 1000).toISOString(),
			photos: ['/static/shopping1.jpg'],
			tags: ['猫粮', '猫砂', '玩具'],
			location: '宠物用品店',
			weather: '多云',
			mood: 'happy',
			shareLevel: 'private',
			amount: 268,
			store: '宠物用品店',
			createTime: new Date(now.getTime() - 10 * 24 * 60 * 60 * 1000).toISOString(),
			updateTime: new Date(now.getTime() - 10 * 24 * 60 * 60 * 1000).toISOString()
		})
		
		return testData
	}

	/**
	 * 添加记录
	 * @param {string} petId 宠物ID
	 * @param {Object} record 记录数据
	 */
	addRecord(petId, record) {
		try {
			const allRecords = uni.getStorageSync(this.storageKey) || {}
			if (!allRecords[petId]) {
				allRecords[petId] = []
			}
			
			const newRecord = {
				id: Date.now(),
				petId: petId,
				category: record.category,
				subCategory: record.subCategory,
				title: record.title,
				content: record.content,
				recordTime: record.recordTime || new Date().toISOString(),
				photos: record.photos || [],
				tags: record.tags || [],
				location: record.location || '',
				weather: record.weather || '',
				mood: record.mood || '',
				shareLevel: record.shareLevel || 'family',
				amount: record.amount || 0,
				store: record.store || '',
				createTime: new Date().toISOString(),
				updateTime: new Date().toISOString()
			}
			
			allRecords[petId].push(newRecord)
			allRecords[petId].sort((a, b) => new Date(b.recordTime) - new Date(a.recordTime))
			
			uni.setStorageSync(this.storageKey, allRecords)
			
			// 初始化社交数据
			this.initSocialData(newRecord.id)
			
			return newRecord
		} catch (error) {
			console.error('添加记录失败:', error)
			return null
		}
	}

	/**
	 * 获取记录的社交数据
	 * @param {string} recordId 记录ID
	 * @returns {Object} 社交数据
	 */
	getSocialData(recordId) {
		try {
			const allSocialData = uni.getStorageSync(this.socialDataKey) || {}
			return allSocialData[recordId] || {
				likes: 0,
				views: 0,
				comments: [],
				likedBy: []
			}
		} catch (error) {
			console.error('获取社交数据失败:', error)
			return {
				likes: 0,
				views: 0,
				comments: [],
				likedBy: []
			}
		}
	}

	/**
	 * 初始化社交数据
	 * @param {string} recordId 记录ID
	 */
	initSocialData(recordId) {
		try {
			const allSocialData = uni.getStorageSync(this.socialDataKey) || {}
			if (!allSocialData[recordId]) {
				allSocialData[recordId] = {
					likes: Math.floor(Math.random() * 10), // 模拟点赞数
					views: Math.floor(Math.random() * 50) + 10, // 模拟浏览数
					comments: this.generateMockComments(), // 模拟评论
					likedBy: []
				}
				uni.setStorageSync(this.socialDataKey, allSocialData)
			}
		} catch (error) {
			console.error('初始化社交数据失败:', error)
		}
	}

	/**
	 * 生成模拟评论
	 * @returns {Array} 评论数组
	 */
	generateMockComments() {
		const comments = [
			{ id: 1, user: '爱宠达人', content: '好可爱啊！', time: '2小时前' },
			{ id: 2, user: '猫咪专家', content: '看起来很健康呢', time: '1天前' },
			{ id: 3, user: '宠物医生', content: '定期体检很重要', time: '2天前' }
		]
		
		// 随机返回0-3条评论
		const count = Math.floor(Math.random() * 4)
		return comments.slice(0, count)
	}

	/**
	 * 点赞记录
	 * @param {string} recordId 记录ID
	 * @param {string} userId 用户ID
	 */
	likeRecord(recordId, userId = 'current_user') {
		try {
			const allSocialData = uni.getStorageSync(this.socialDataKey) || {}
			if (!allSocialData[recordId]) {
				this.initSocialData(recordId)
				allSocialData[recordId] = this.getSocialData(recordId)
			}
			
			const socialData = allSocialData[recordId]
			const likedIndex = socialData.likedBy.indexOf(userId)
			
			if (likedIndex === -1) {
				// 点赞
				socialData.likes += 1
				socialData.likedBy.push(userId)
			} else {
				// 取消点赞
				socialData.likes -= 1
				socialData.likedBy.splice(likedIndex, 1)
			}
			
			uni.setStorageSync(this.socialDataKey, allSocialData)
			return socialData
		} catch (error) {
			console.error('点赞失败:', error)
			return null
		}
	}

	/**
	 * 增加浏览量
	 * @param {string} recordId 记录ID
	 */
	incrementViews(recordId) {
		try {
			const allSocialData = uni.getStorageSync(this.socialDataKey) || {}
			if (!allSocialData[recordId]) {
				this.initSocialData(recordId)
				allSocialData[recordId] = this.getSocialData(recordId)
			}
			
			allSocialData[recordId].views += 1
			uni.setStorageSync(this.socialDataKey, allSocialData)
		} catch (error) {
			console.error('增加浏览量失败:', error)
		}
	}

	/**
	 * 添加评论
	 * @param {string} recordId 记录ID
	 * @param {string} content 评论内容
	 * @param {string} user 用户名
	 */
	addComment(recordId, content, user = '我') {
		try {
			const allSocialData = uni.getStorageSync(this.socialDataKey) || {}
			if (!allSocialData[recordId]) {
				this.initSocialData(recordId)
				allSocialData[recordId] = this.getSocialData(recordId)
			}
			
			const newComment = {
				id: Date.now(),
				user: user,
				content: content,
				time: '刚刚'
			}
			
			allSocialData[recordId].comments.unshift(newComment)
			uni.setStorageSync(this.socialDataKey, allSocialData)
			
			return newComment
		} catch (error) {
			console.error('添加评论失败:', error)
			return null
		}
	}

	/**
	 * 获取分类信息
	 * @param {string} category 分类
	 * @param {string} subCategory 子分类
	 * @returns {Object} 分类信息
	 */
	getCategoryInfo(category, subCategory = null) {
		const categoryInfo = this.categories[category]
		if (!categoryInfo) {
			return { name: '未知分类', icon: '📝', color: '#999999' }
		}
		
		if (subCategory && categoryInfo.subCategories) {
			const subCategoryInfo = categoryInfo.subCategories[subCategory]
			if (subCategoryInfo) {
				return {
					name: subCategoryInfo.name,
					icon: subCategoryInfo.icon,
					color: categoryInfo.color
				}
			}
		}
		
		return {
			name: categoryInfo.name,
			icon: categoryInfo.icon,
			color: categoryInfo.color
		}
	}

	/**
	 * 搜索记录
	 * @param {string} petId 宠物ID
	 * @param {string} keyword 关键词
	 * @returns {Array} 搜索结果
	 */
	searchRecords(petId, keyword) {
		const records = this.getRecords(petId)
		if (!keyword) return records
		
		const lowerKeyword = keyword.toLowerCase()
		return records.filter(record => {
			return record.title.toLowerCase().includes(lowerKeyword) ||
				   record.content.toLowerCase().includes(lowerKeyword) ||
				   record.tags.some(tag => tag.toLowerCase().includes(lowerKeyword))
		})
	}

	/**
	 * 按分类筛选记录
	 * @param {string} petId 宠物ID
	 * @param {string} category 一级分类
	 * @param {string} subCategory 二级分类
	 * @returns {Array} 筛选结果
	 */
	filterRecords(petId, category = null, subCategory = null) {
		const records = this.getRecords(petId)
		
		if (!category) return records
		
		return records.filter(record => {
			if (subCategory) {
				return record.category === category && record.subCategory === subCategory
			} else {
				return record.category === category
			}
		})
	}
}

export default new RecordManager()
