#!/usr/bin/env python3
import json,sys
from datetime import datetime,timezone
from pathlib import Path
PROJECT=Path(__file__).resolve().parents[1];PROMOTION=PROJECT/'story/promotion-report.json';OUT=PROJECT/'output/info.txt';RECEIPT=PROJECT/'log/metadata-verification.json';TITLE='Cô Kỹ Sư Bị Vu Tội Sập Cầu, Mười Ba Vết Nứt Đổi Hướng';DESCRIPTION='''Lâm Tĩnh Nghi vừa rời hiện trường cứu hộ đã bị biến thành người chịu trách nhiệm cho vụ sập cầu đi bộ Lam Giang. Hồ sơ mang chữ ký của cô, đồng nghiệp im lặng, dư luận đòi một kẻ có tội, còn phần cầu cuối cùng sắp bị phá dỡ trước khi sự thật được kiểm tra.\n\nGiữa mưa lớn và những người bị thương đang chờ công lý, Tĩnh Nghi phải lần lại mười ba vết nứt, bảo vệ những nhân chứng sợ hãi và tự mình ngăn hiện trường biến mất. Mỗi người từng quay lưng sẽ phải lựa chọn: tiếp tục im lặng hay đứng trước cộng đồng nói ra phần sự thật mình biết.\n\n🎧 Tên truyện: Cô Kỹ Sư Bị Vu Tội Sập Cầu, Mười Ba Vết Nứt Đổi Hướng\n🎙 Giọng đọc: Huyền An Audio\n📚 Thể loại: Drama nghề nghiệp, an toàn công trình, cứu hộ đô thị, phản công\nTình trạng: Trọn bộ\n\nNếu yêu thích câu chuyện, hãy đăng ký kênh và để lại cảm nhận của bạn dưới phần bình luận.\n\nHuyền An Audio – Lắng nghe một thế giới khác.\n\nNội dung được phát hành độc quyền tại Huyền An Audio. Vui lòng không sao chép và đăng tải lại dưới bất kỳ hình thức nào.\n\n#HuyenAnAudio #TruyenAudio #NgheTruyen #TruyenHay #TruyenDemKhuya #DramaNgheNghiep'''
def main():
 if not PROMOTION.exists():print('Metadata blocked: promotion missing',file=sys.stderr);return 1
 p=json.loads(PROMOTION.read_text());canon=p.get('spoken_sha256')
 if p.get('verified') is not True or not canon:print('Metadata blocked: promotion invalid',file=sys.stderr);return 1
 youtube_title=TITLE+' | Truyện Audio Full | Huyền An Audio'
 if not 2<=len(youtube_title)<=100:print('Metadata blocked: title length',file=sys.stderr);return 1
 OUT.parent.mkdir(parents=True,exist_ok=True);OUT.write_text('TITLE\n'+youtube_title+'\n\nDESCRIPTION\n'+DESCRIPTION.strip()+'\n');receipt={'version':1,'verified':True,'source_canon_sha256':canon,'title':youtube_title,'title_length':len(youtube_title),'description_chars':len(DESCRIPTION.strip()),'output':'output/info.txt','checked_at':datetime.now(timezone.utc).isoformat()};RECEIPT.write_text(json.dumps(receipt,ensure_ascii=False,indent=2)+'\n');print(json.dumps(receipt,ensure_ascii=False));return 0
if __name__=='__main__':sys.exit(main())
