# Kho Truyện công khai — Cloudflare Pages + Firebase

Website tĩnh, không yêu cầu khách đăng nhập. Khách có thể tìm theo tên Việt/Trung/tác giả, dán văn bản tiếng Trung hoặc chọn file `.txt` để kiểm tra trùng nội dung, mở truyện, đọc và tải TXT tiếng Việt/tiếng Trung, xem link truyện gốc. Chỉ admin được phép thêm, sửa, xóa.

## 1. Tạo Firebase
1. Mở https://console.firebase.google.com/ → Add project (tạo dự án).
2. Project settings → Your apps → Web app (biểu tượng `</>`) → sao chép `firebaseConfig` vào `firebase-config.js` (thay TẤT CẢ giá trị ví dụ).
3. Build → Firestore Database → Create database (production mode). Chọn khu vực lưu trữ phù hợp.
4. Build → Storage → Get started. **Kiểm tra khu vực, gói tính phí và hạn mức của Firebase Storage** vì tùy dự án có thể cần bật thanh toán trước khi dùng.
5. Build → Authentication → Sign-in method → bật **Email/Password**.
6. Vào Firestore → tab Rules, thay bằng toàn bộ nội dung file `firestore.rules` rồi Publish.
7. Vào Storage → tab Rules, thay bằng toàn bộ nội dung file `storage.rules` rồi Publish.

## 2. Tạo tài khoản admin (bắt buộc)
1. Authentication → Users → Add user → nhập email và mật khẩu admin.
2. Sao chép **UID** của user được tạo.
3. Firestore Database → Start collection `admins` → Document ID = UID đó → thêm trường **enabled** (kiểu **boolean**) = **true**.
4. KHÔNG tạo một nút cho khách tự đăng ký admin. Tài liệu `admins` chỉ tạo/sửa trực tiếp từ Firebase Console (hoặc qua công cụ quản trị đáng tin cậy).
5. Từ web chọn `Quản trị` và đăng nhập bằng email/mật khẩu vừa tạo.

## 3. Đưa lên Cloudflare Pages
1. Giữ nguyên các file `index.html`, `styles.css`, `app.js`, `firebase-config.js` trong thư mục gốc khi upload.
2. Cloudflare Dashboard → Workers & Pages → Create → Pages → Upload assets → chọn thư mục đã giải nén hoặc tệp ZIP (nếu màn hình hỗ trợ).
3. Sau khi triển khai, mở địa chỉ `.pages.dev` để kiểm tra.
4. **Firebase Authentication → Settings → Authorized domains**: thêm chính xác tên miền `ten-trang.pages.dev` và các tên miền riêng mà bạn dùng. Nếu không, đăng nhập có thể bị chặn.
5. Có thể mở thử trực tiếp file `index.html` cho giao diện, nhưng để xác thực và kết nối Firebase ổn định, phải phục vụ bằng `http(s)` thay vì `file://`.

## 4. Cách dùng
- Khách không cần tài khoản: chọn `Kho truyện` / `Kiểm tra trùng`, dán chữ Trung hoặc tải file TXT, xem bản Việt đã liên kết.
- Admin: đăng nhập → `Quản trị` → nhập tên Việt/Trung/tác giả/link gốc → tải file Trung và/hoặc Việt lên → bấm `Kiểm tra trùng file Trung` → `Lưu truyện`.
- Một bộ truyện là một hồ sơ. Nếu bạn đã có bản Trung và muốn ghép bản Việt: chọn **Sửa** bộ đó và tải file Việt lên, không tạo bản ghi mới.

## Lưu ý quan trọng
- Website chỉ hoạt động với dữ liệu dùng chung SAU KHI kết nối tới Firebase, không phải kho lưu offline trên trình duyệt.
- **Phát hiện trùng**: so SHA-256 văn bản tiếng Trung đã bỏ dấu câu/khoảng trắng; đồng thời lấy dấu vân tay các đoạn nội dung để gợi ý nghi trùng. Cùng văn bản nhưng khác tên file vẫn phát hiện. Các bản dịch, tóm tắt hoặc chỉnh sửa quá nhiều có thể không tự nhận diện; kết quả gần giống KHÔNG phải % đạo văn hay độ trùng tuyệt đối.
- Mặc định lưu tối đa 1.500 dấu vân tay mỗi truyện và đọc tối đa 1.000 bản ghi. Đây là bản MVP cho kho vừa và nhỏ, không phù hợp kho rất lớn. Trường hợp có hơn 1.000 truyện cần bổ sung tìm kiếm/đối chiếu phía máy chủ và phân trang. Đối với file lớn hoặc văn bản quá ngắn, độ chính xác giảm.
- Mã Firebase Web Config **không phải mật khẩu**; bảo mật dựa vào Firestore Rules, Storage Rules và quyền admin. KHÔNG đặt tài khoản service account/private key trong các file web.
- File TXT trong kho được đặt **công khai** để người dùng có thể đọc và tải. Chỉ đăng và công khai nội dung bạn có quyền sử dụng/chia sẻ. Nếu chỉ muốn kiểm tra trùng nhưng không phát tán nội dung, cần đổi cơ chế quyền truy cập và bỏ tính năng đọc/tải công khai.
- Giới hạn tải lên hiện là 5 MB/file. Bộ kiểm tra công khai chạy trong trình duyệt và có thể chậm khi nhiều sách; Firestore/Storage có chi phí tùy mức sử dụng. Muốn chống spam/lạm dụng nâng cao nên chuyển kiểm tra trùng sang server, thiết lập rate limiting / App Check.
- Trình duyệt muốn kiểm tra nội dung phải có Web Crypto API (HTTPS). Cloudflare Pages hỗ trợ HTTPS.
- Nếu lỗi thiếu index: khi nén ZIP, bảo đảm `index.html` ở gốc ZIP.


## Theo dõi đăng lên YouTube (bản cập nhật)

Khi admin thêm hoặc sửa truyện, mở mục **Theo dõi đăng YouTube** và chọn **+ Thêm kênh/video**. Nhập tên kênh (bắt buộc), link YouTube và ngày đăng (không bắt buộc). Có thể thêm nhiều kênh/video cho cùng một bộ. Nếu chưa đăng, để trống mục này.

Khách không cần đăng nhập để nhìn thấy trạng thái đã/chưa đăng, tên kênh, ngày đăng và mở video; khách cũng có thể lọc ở **Kho truyện** theo trạng thái YouTube hoặc tìm theo tên kênh. Chỉ admin được sửa trạng thái. Trạng thái được admin cập nhật thủ công; không tự đồng bộ với YouTube.

**Quan trọng khi cập nhật web cũ:** Thay tất cả file trong website, đặc biệt là `firestore.rules`, và **Publish** lại Firestore Rules. Nếu chưa cập nhật rules, thao tác lưu có thể bị từ chối. Các truyện cũ không có trường `youtubeUploads` tự được coi là chưa đăng cho tới khi admin bổ sung.
