<!DOCTYPE html>
<html lang="th">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Postiz Media Manager</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
.media-card {
transition: all 0.2s ease;
}
.media-card:hover {
transform: translateY(-2px);
box-shadow: 0 10px 20px rgba(0,0,0,0.1);
}
.media-card.selected {
border-color: #3b82f6;
background-color: #eff6ff;
}
.spinner {
border: 3px solid #f3f3f3;
border-top: 3px solid #3b82f6;
border-radius: 50%;
width: 40px;
height: 40px;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.badge {
display: inline-block;
padding: 0.25rem 0.75rem;
border-radius: 9999px;
font-size: 0.75rem;
font-weight: 600;
}
.badge-success { background-color: #dcfce7; color: #166534; }
.badge-warning { background-color: #fef3c7; color: #92400e; }
.badge-danger { background-color: #fee2e2; color: #991b1b; }
.badge-info { background-color: #dbeafe; color: #1e40af; }
</style>
</head>
<body class="bg-gray-50">
<!-- Header -->
<header class="bg-white shadow-sm">
<div class="max-w-7xl mx-auto px-4 py-4 sm:px-6 lg:px-8">
<div class="flex items-center justify-between">
<div class="flex items-center space-x-3">
<div class="w-10 h-10 bg-blue-500 rounded-lg flex items-center justify-center">
<i class="fas fa-images text-white"></i>
</div>
<div>
<h1 class="text-2xl font-bold text-gray-900">Postiz Media Manager</h1>
<p class="text-sm text-gray-500">จัดการและลบ media ที่ไม่ใช้งาน</p>
</div>
</div>
<button id="refreshBtn" class="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition">
<i class="fas fa-sync-alt mr-2"></i> รีเฟรช
</button>
</div>
</div>
</header>
<!-- Main Content -->
<main class="max-w-7xl mx-auto px-4 py-8 sm:px-6 lg:px-8">
<!-- Stats Cards -->
<div class="grid grid-cols-1 md:grid-cols-4 gap-4 mb-8">
<div class="bg-white rounded-lg shadow p-6">
<div class="flex items-center justify-between">
<div>
<p class="text-sm text-gray-500">Media ทั้งหมด</p>
<p id="totalMedia" class="text-2xl font-bold text-gray-900">-</p>
</div>
<div class="w-12 h-12 bg-blue-100 rounded-full flex items-center justify-center">
<i class="fas fa-images text-blue-500"></i>
</div>
</div>
</div>
<div class="bg-white rounded-lg shadow p-6">
<div class="flex items-center justify-between">
<div>
<p class="text-sm text-gray-500">Media ที่ปลอดภัย</p>
<p id="protectedMedia" class="text-2xl font-bold text-green-600">-</p>
</div>
<div class="w-12 h-12 bg-green-100 rounded-full flex items-center justify-center">
<i class="fas fa-shield-alt text-green-500"></i>
</div>
</div>
</div>
<div class="bg-white rounded-lg shadow p-6">
<div class="flex items-center justify-between">
<div>
<p class="text-sm text-gray-500">Media ไม่ใช้งาน</p>
<p id="orphanMedia" class="text-2xl font-bold text-orange-600">-</p>
</div>
<div class="w-12 h-12 bg-orange-100 rounded-full flex items-center justify-center">
<i class="fas fa-exclamation-triangle text-orange-500"></i>
</div>
</div>
</div>
<div class="bg-white rounded-lg shadow p-6">
<div class="flex items-center justify-between">
<div>
<p class="text-sm text-gray-500">เลือกแล้ว</p>
<p id="selectedCount" class="text-2xl font-bold text-blue-600">0</p>
</div>
<div class="w-12 h-12 bg-blue-100 rounded-full flex items-center justify-center">
<i class="fas fa-check-circle text-blue-500"></i>
</div>
</div>
</div>
</div>
<!-- Filters -->
<div class="bg-white rounded-lg shadow p-6 mb-8">
<h2 class="text-lg font-semibold text-gray-900 mb-4">ตัวกรอง</h2>
<div class="grid grid-cols-1 md:grid-cols-3 gap-4 mb-4">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">ประเภท</label>
<select id="filterType" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent">
<option value="all">ทั้งหมด</option>
<option value="orphans">Media ไม่ใช้งาน</option>
<option value="published">Media ในโพสต์ที่ลงแล้ว</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">วันที่เริ่มต้น</label>
<input type="date" id="startDate" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">วันที่สิ้นสุด</label>
<input type="date" id="endDate" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent">
</div>
</div>
<div class="flex items-center space-x-4">
<button id="applyFilters" class="px-6 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition">
<i class="fas fa-filter mr-2"></i> กรอง
</button>
<button id="clearFilters" class="px-6 py-2 bg-gray-200 text-gray-700 rounded-lg hover:bg-gray-300 transition">
<i class="fas fa-times mr-2"></i> ล้างตัวกรอง
</button>
<button id="selectAll" class="px-6 py-2 bg-green-500 text-white rounded-lg hover:bg-green-600 transition">
<i class="fas fa-check-double mr-2"></i> เลือกทั้งหมด
</button>
<button id="deselectAll" class="px-6 py-2 bg-gray-200 text-gray-700 rounded-lg hover:bg-gray-300 transition">
<i class="fas fa-times-circle mr-2"></i> ยกเลิกทั้งหมด
</button>
</div>
</div>
<!-- Action Buttons -->
<div class="bg-white rounded-lg shadow p-6 mb-8">
<div class="flex items-center justify-between">
<div>
<h2 class="text-lg font-semibold text-gray-900">การดำเนินการ</h2>
<p class="text-sm text-gray-500" id="actionInfo">เลือก media ที่ต้องการลบ แล้วกดปุ่มลบ</p>
</div>
<div class="flex space-x-3">
<button id="deleteSelectedBtn" disabled class="px-6 py-3 bg-red-500 text-white rounded-lg hover:bg-red-600 transition disabled:bg-gray-300 disabled:cursor-not-allowed">
<i class="fas fa-trash-alt mr-2"></i> ลบที่เลือก (<span id="deleteCount">0</span>)
</button>
</div>
</div>
</div>
<!-- Loading Indicator -->
<div id="loadingIndicator" class="hidden flex justify-center items-center py-12">
<div class="spinner"></div>
</div>
<!-- Media Grid -->
<div id="mediaContainer" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4">
<!-- Media cards will be inserted here -->
</div>
<!-- Empty State -->
<div id="emptyState" class="hidden text-center py-12">
<div class="w-24 h-24 bg-gray-200 rounded-full flex items-center justify-center mx-auto mb-4">
<i class="fas fa-inbox text-gray-400 text-4xl"></i>
</div>
<h3 class="text-xl font-semibold text-gray-900 mb-2">ไม่พบ Media</h3>
<p class="text-gray-500">ลองปรับเปลี่ยนตัวกรองหรือรีเฟรชหน้านี้</p>
</div>
</main>
<!-- Delete Confirmation Modal -->
<div id="deleteModal" class="hidden fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50">
<div class="bg-white rounded-lg shadow-xl max-w-md w-full mx-4">
<div class="p-6">
<div class="flex items-center space-x-3 mb-4">
<div class="w-12 h-12 bg-red-100 rounded-full flex items-center justify-center">
<i class="fas fa-exclamation-triangle text-red-500 text-xl"></i>
</div>
<h3 class="text-xl font-semibold text-gray-900">ยืนยันการลบ</h3>
</div>
<p class="text-gray-600 mb-6">คุณกำลังจะลบ <strong id="modalDeleteCount">0</strong> media</p>
<p class="text-sm text-red-600 mb-6">⚠️ การกระทำนี้ไม่สามารถย้อนกลับได้!</p>
<div class="flex space-x-3">
<button id="confirmDeleteBtn" class="flex-1 px-4 py-2 bg-red-500 text-white rounded-lg hover:bg-red-600 transition">
<i class="fas fa-trash-alt mr-2"></i> ยืนยันลบ
</button>
<button id="cancelDeleteBtn" class="flex-1 px-4 py-2 bg-gray-200 text-gray-700 rounded-lg hover:bg-gray-300 transition">
ยกเลิก
</button>
</div>
</div>
</div>
</div>
<!-- Result Modal -->
<div id="resultModal" class="hidden fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50">
<div class="bg-white rounded-lg shadow-xl max-w-md w-full mx-4">
<div class="p-6">
<div class="flex items-center space-x-3 mb-4">
<div id="resultIcon" class="w-12 h-12 rounded-full flex items-center justify-center">
<i class="text-xl"></i>
</div>
<h3 class="text-xl font-semibold text-gray-900" id="resultTitle">ผลลัพธ์</h3>
</div>
<div id="resultMessage" class="text-gray-600 mb-6"></div>
<button id="closeResultBtn" class="w-full px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition">
ตกลง
</button>
</div>
</div>
</div>
<script src="app.js"></script>
</body>
</html>