<template>
	<ObjectList class="p-5" :options="logsOptions" />
</template>

<script>
import { isMobile } from '../../utils/device';
import { duration } from '../../utils/format';
import ObjectList from '../ObjectList.vue';

// 英文 job_type 到中文的映射
const jobTypeI18nMap = {
	'Update Site Status': '更新站点状态',
	'Update Site Configuration': '更新站点配置',
	'Install App on Site': '安装应用到站点',
	'Uninstall App from Site': '从站点卸载应用',
	'Backup Site': '备份站点',
	'Restore Site': '恢复站点',
	'Create Server': '创建服务器',
	'Update In Place': '原地升级',
	// 可按需补充更多
};
function jobTypeI18n(type) {
	return jobTypeI18nMap[type] || type;
}

// 状态映射
const statusI18nMap = {
	'Pending': '待处理',
	'Running': '运行中',
	'Success': '成功',
	'Failure': '失败',
};
function statusI18n(status) {
	return statusI18nMap[status] || status;
}

// 中文时间格式化
function formatTimeZh(time) {
	if (!time) return '';
	const date = typeof time === 'string' ? new Date(time) : time;
	const now = new Date();
	const diff = (now.getTime() - date.getTime()) / 1000;
	if (diff < 60) return '刚刚';
	if (diff < 3600) return Math.floor(diff / 60) + '分钟前';
	if (diff < 86400) return Math.floor(diff / 3600) + '小时前';
	if (diff < 2592000) return Math.floor(diff / 86400) + '天前';
	return date.toLocaleDateString('zh-CN');
}

export default {
	name: 'SiteJobs',
	props: ['name'],
	components: {
		ObjectList
	},
	computed: {
		logsOptions() {
			const pagetype = 'Site';
			return {
				pagetype: 'Agent Job',
				filters: {
					site: this.name
				},
				orderBy: 'creation desc',
				searchField: 'job_type',
				fields: ['end', 'job_id'],
				filterControls() {
					return [
						{
							type: 'select',
							label: '状态',
							fieldname: 'status',
							class: !isMobile() ? 'w-24' : '',
							options: [
								{ label: '', value: '' },
								{ label: '待处理', value: 'Pending' },
								{ label: '运行中', value: 'Running' },
								{ label: '成功', value: 'Success' },
								{ label: '失败', value: 'Failure' }
							]
						},
						{
							type: 'link',
							label: '类型',
							fieldname: 'job_type',
							options: {
								pagetype: 'Agent Job Type',
								orderBy: 'name asc',
								pageLength: 100
							}
						}
					];
				},
				columns: [
					{
						label: '任务类型',
						fieldname: 'job_type',
						class: 'font-medium',
						format: jobTypeI18n
					},
					{
						label: '状态',
						fieldname: 'status',
						type: 'Badge',
						width: 0.5,
						format: statusI18n
					},
					{
						label: '站点',
						fieldname: 'site',
						width: 1.2,
						condition: () => pagetype !== 'Site'
					},
					{
						label: '持续时间',
						fieldname: 'duration',
						width: 0.35,
						format(value, row) {
							if (row.job_id === 0 || !row.end) return;
							return duration(value);
						}
					},
					{
						label: '创建者',
						fieldname: 'owner'
					},
					{
						label: '',
						fieldname: 'creation',
						type: 'Timestamp',
						width: 0.5,
						align: 'right',
						format: formatTimeZh
					}
				].filter(c => (c.condition ? c.condition() : true))
			};
		}
	}
};
</script>