<template>
	<div class="input-shell">
		<div class="input-card">
			<el-input
				v-model="message"
				type="textarea"
				:rows="1"
				:autosize="{ minRows: 2, maxRows: 5 }"
				placeholder="多说说你的偏好和要求，我会越用越懂你"
				class="message-input"
				@keydown.enter.exact="handleSend"
			/>

			<div class="input-toolbar">
				<div class="toolbar-left">
					<el-button circle class="tool-btn" @click="handleAttachment">
						<el-icon><Plus /></el-icon>
					</el-button>
					<el-dropdown trigger="click" @command="handleSkillSelect">
						<el-button class="pill-btn">
							{{ currentSkillDisplay }}
						</el-button>
						<template #dropdown>
							<el-dropdown-menu>
								<el-dropdown-item command="default">默认对话</el-dropdown-item>
								<el-dropdown-item command="code-review">代码审查</el-dropdown-item>
								<el-dropdown-item command="refactor">代码重构</el-dropdown-item>
								<el-dropdown-item command="writing">内容写作</el-dropdown-item>
							</el-dropdown-menu>
						</template>
					</el-dropdown>
				</div>
				<div class="toolbar-right">
					<el-button circle class="send-btn" :disabled="!message.trim()" @click="handleSend">
						<el-icon><Top /></el-icon>
					</el-button>
				</div>
			</div>

			<!-- 常用工作流胶囊 -->
			<div class="workflow-pills" v-if="commonWorkflows.length > 0">
				<div
					v-for="wf in commonWorkflows"
					:key="wf.id"
					class="workflow-pill"
					:class="{ active: selectedWorkflowId === wf.id }"
					@click="selectWorkflow(wf)"
				>
					<el-icon class="pill-icon">
						<component :is="wf.icon" />
					</el-icon>
					<span class="pill-text">{{ wf.name }}</span>
				</div>
			</div>
		</div>
	</div>
</template>

<script setup lang="ts">
import { ref, computed } from 'vue';
import { useRouter } from 'vue-router';
import { Top, Plus, MagicStick, Document, CircleCheck } from '@element-plus/icons-vue';
import { ElMessage } from 'element-plus';

interface Emits {
	(e: 'send', message: string): void;
}

interface Workflow {
	id: number;
	name: string;
	icon: any;
	prefix: string;
	editPath: string;
}

const emit = defineEmits<Emits>();
const router = useRouter();
const message = ref('');
const selectedSkill = ref('default');
const selectedWorkflowId = ref<number | null>(null);

const skillLabels: Record<string, string> = {
	default: '选择技能',
	'code-review': '代码审查',
	refactor: '代码重构',
	writing: '内容写作',
};

const currentSkillDisplay = computed(() => {
	return selectedSkill.value === 'default' ? '选择技能' : skillLabels[selectedSkill.value];
});

const skills: Record<string, string> = {
	default: '',
	'code-review': '[技能：代码审查] 请帮我审查下面这段代码，找出潜在问题并给出改进建议：\n',
	refactor: '[技能：代码重构] 请帮我重构下面这段代码，提升可读性和可维护性：\n',
	writing: '[技能：内容写作] 请根据下面的需求帮我创作内容：\n',
};

// 常用工作流列表
const commonWorkflows: Workflow[] = [
	{
		id: 1,
		name: '审查+测试',
		icon: Document,
		prefix: '[工作流：审查+测试] 完成后请自动生成单元测试：\n',
		editPath: '/settings/workflow',
	},
	{
		id: 2,
		name: '文档再编码',
		icon: Document,
		prefix: '[工作流：文档再编码] 请先编写接口文档，再实现代码：\n',
		editPath: '/settings/workflow',
	},
	{
		id: 3,
		name: '代码重构',
		icon: Document,
		prefix: '[工作流：代码重构] 请帮我重构这段代码：\n',
		editPath: '/settings/workflow',
	},
	{
		id: 4,
		name: '需求分析',
		icon: Document,
		prefix: '[工作流：需求分析] 请帮我分析这个需求并拆解任务：\n',
		editPath: '/settings/workflow',
	},
];

const handleSend = (event?: KeyboardEvent) => {
	if (event) event.preventDefault();
	const msg = message.value.trim();
	if (!msg) return;
	const skillPrefix = skills[selectedSkill.value] || '';
	const workflowPrefix = selectedWorkflowId.value !== null ? commonWorkflows.find((w) => w.id === selectedWorkflowId.value)?.prefix || '' : '';
	const finalMessage = (skillPrefix + workflowPrefix + msg).trim();
	emit('send', finalMessage);
	message.value = '';
	// 发送后清空选择
	selectedWorkflowId.value = null;
};

const handleAttachment = () => {
	ElMessage.info('附件上传功能开发中...');
};

const handleSkillSelect = (key: string | number | object) => {
	selectedSkill.value = String(key);
	if (selectedSkill.value !== 'default') {
		ElMessage.success(`已选择技能：${skillLabels[selectedSkill.value]}`);
	}
};

const selectWorkflow = (wf: Workflow) => {
	if (selectedWorkflowId.value === wf.id) {
		selectedWorkflowId.value = null;
		ElMessage.info('已取消工作流');
	} else {
		selectedWorkflowId.value = wf.id;
		ElMessage.success(`已选择工作流：${wf.name}`);
	}
};
</script>

<style scoped lang="scss">
.input-shell {
	position: relative;
	z-index: 12;
	margin-top: -20px;
	padding: 0 0 50px;
	background: transparent;
}

.input-card {
	width: min(1060px, 82%);
	margin: 0 auto;
	background:
		linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 255, 255, 0.94) 100%),
		radial-gradient(120% 180% at 0% 0%, rgba(59, 130, 246, 0.15) 0%, rgba(59, 130, 246, 0) 38%),
		radial-gradient(80% 120% at 100% 100%, rgba(168, 85, 247, 0.08) 0%, rgba(168, 85, 247, 0) 38%);
	border: 1px solid rgba(59, 130, 246, 0.28);
	border-radius: 20px;
	box-shadow:
		0 24px 48px rgba(15, 23, 42, 0.12),
		0 0 0 1px rgba(59, 130, 246, 0.08) inset,
		0 8px 16px rgba(37, 99, 235, 0.1);
	padding: 16px 18px 18px;
	backdrop-filter: blur(16px);
}

.message-input {
	:deep(.el-textarea__inner) {
		border: none;
		box-shadow: none;
		resize: none;
		padding: 8px 6px 14px;
		font-size: 15px;
		line-height: 1.65;
		color: #0f172a;
		background: transparent;
		min-height: 50px;
		font-weight: 500;

		&::placeholder {
			color: #90a1b7;
			font-weight: 400;
		}
	}
}

.input-toolbar {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 10px;
	padding-top: 2px;
}

.toolbar-left,
.toolbar-right {
	display: flex;
	align-items: center;
	gap: 10px;
}

.tool-btn {
	width: 32px;
	height: 32px;
	border: 1px solid #d9e4f5;
	color: #5b6b84;
	background: linear-gradient(180deg, #ffffff 0%, #f8fbff 100%);
	box-shadow: 0 2px 6px rgba(15, 23, 42, 0.06);
	transition: all 0.2s ease;

	&:hover {
		color: #2b4d8f;
		background: linear-gradient(135deg, #f0f7ff 0%, #e0edff 100%);
		border-color: #bfdbfe;
		transform: translateY(-1px);
		box-shadow: 0 4px 12px rgba(59, 130, 246, 0.15);
	}
}

.pill-btn {
	height: 32px;
	padding: 0 14px;
	border-radius: 999px;
	border: 1px solid #dbe7f7;
	color: #30435f;
	background: linear-gradient(180deg, #ffffff 0%, #f6f9ff 100%);
	font-size: 12px;
	font-weight: 600;
	transition: all 0.2s ease;

	&:hover {
		background: linear-gradient(135deg, #f0f7ff 0%, #e0edff 100%);
		border-color: #bfdbfe;
		color: #1d4ed8;
	}
}

.send-btn {
	width: 32px;
	height: 32px;
	border: none;
	background: linear-gradient(135deg, #60a5fa 0%, #3b82f6 50%, #2563eb 100%);
	color: #fff;
	box-shadow: 0 6px 16px rgba(59, 130, 246, 0.4);
	transition: all 0.2s ease;

	&:hover:not(:disabled) {
		filter: brightness(1.08);
		transform: translateY(-1px);
		box-shadow: 0 8px 20px rgba(59, 130, 246, 0.5);
	}

	&:disabled {
		opacity: 0.5;
		box-shadow: none;
		background: linear-gradient(135deg, #cbd5e1 0%, #94a3b8 100%);
	}
}

/* 工作流胶囊样式 */
.workflow-pills {
	margin-top: 12px;
	padding-top: 12px;
	border-top: 1px solid rgba(59, 130, 246, 0.15);
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
}

.workflow-pill {
	display: inline-flex;
	align-items: center;
	gap: 4px;
	padding: 4px 10px;
	border-radius: 999px;
	border: 1px solid rgba(59, 130, 246, 0.3);
	background: rgba(255, 255, 255, 0.6);
	cursor: pointer;
	transition: all 0.2s ease;
	color: #475569;

	&:hover {
		border-color: #3b82f6;
		background: rgba(59, 130, 246, 0.08);
		transform: translateY(-1px);
	}

	&.active {
		border-color: #3b82f6;
		background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
		color: #ffffff;
		box-shadow: 0 2px 8px rgba(59, 130, 246, 0.3);
	}

	.pill-icon {
		font-size: 14px;
	}

	.pill-text {
		font-size: 12px;
		font-weight: 500;
		line-height: 1.2;
	}
}
</style>
