# -*- coding: utf-8 -*-
from abc import ABCMeta, abstractmethod

class Skill(metaclass=ABCMeta):

	isImmersive = False

	def init(self, robot):
		self.priority = 0
		self.robot = robot

	def play(self, src, delete=False, onCompleted=None, volume=1):
		self.robot.mouth.speek(src, delete, onCompleted, volume)

	def say(self, text, cache=False, onCompleted=None):
		self.robot.mouth.say(text, cache=cache, plugin=self.__name__, onCompleted=onCompleted)

	def activeListen(self, silent=False):
		return self.robot.ear.listen(silent)

	def clearImmersive(self):
		self.robot.setImmersiveMode(None)

	"""
	是否适合由该插件处理

	参数：
	query -- 用户的指令字符串
	parsed -- 用户指令经过 NLU 解析后的结果

	返回：
	True: 适合由该插件处理
	False: 不适合由该插件处理
	"""
	@abstractmethod
	def match(self, query, parsed):
		return False

	"""
	处理逻辑

	参数：
	query -- 用户的指令字符串
	parsed -- 用户指令经过 NLU 解析后的结果
	"""
	@abstractmethod
	def handle(self, query, parsed):
		pass

	"""
	是否适合在沉浸模式下处理，
	仅适用于有沉浸模式的插件（如音乐等）
	当用户唤醒时，可以响应更多指令集。
	例如：“"上一首"、"下一首" 等
	"""
	def matchImmersive(self, query, parsed):
		return False

	"""
	暂停当前正在处理的任务，
	当处于该沉浸模式下且被唤醒时，
	将自动触发这个方法，
	可以用于强制暂停一个耗时的操作		
	"""
	def pause(self):
		return

	"""
	恢复当前插件，
	仅适用于有沉浸模式的插件（如音乐等）
	当用户误唤醒或者唤醒进行闲聊后，
	可以自动恢复当前插件的处理逻辑
	"""
	def restore(self):
		return
		
		
