#!/usr/bin/env python3
from pathlib import Path
import xml.etree.ElementTree as ET
root=Path(__file__).resolve().parents[1]
for p in root.rglob('*.xml'): ET.parse(p)
main=(root/'src/com/lemenzo/messenger/MainActivity.java').read_text()
compose=(root/'src/com/lemenzo/messenger/ComposeActivity.java').read_text()
repo=(root/'src/com/lemenzo/messenger/data/MessageRepository.java').read_text()
pending=(root/'src/com/lemenzo/messenger/data/PendingMessageStore.java').read_text()
swipe=(root/'src/com/lemenzo/messenger/ui/SwipeRevealTouchListener.java').read_text()
ret=(root/'src/com/lemenzo/messenger/retention/MessageRetentionManager.java').read_text()
job=(root/'src/com/lemenzo/messenger/retention/MessageRetentionJobService.java').read_text()
settings=(root/'src/com/lemenzo/messenger/SettingsActivity.java').read_text()
manifest=(root/'AndroidManifest.xml').read_text()
strings=(root/'res/values/strings.xml').read_text()
checks={
 'swipe left only': 'Math.max(-width, Math.min(0f' in swipe,
 'swipe never auto deletes': 'onDeleteRequested' not in swipe and 'deleteConversation' not in swipe,
 'trash click deletes conversation': 'action.setOnClickListener' in main and 'repo.deleteConversation' in main,
 'no confirmation on conversation swipe': 'showDeleteConfirmation' not in main,
 'one open swipe row': 'openSwipeForeground' in main,
 'close swipe on scroll': 'SCROLL_STATE_TOUCH_SCROLL' in main,
 'Lemenzo red delete action': 'swipe_delete_background' in main,
 'pending shown in inbox': 'mergePendingConversations' in repo and 'PendingMessageStore(appContext)' in repo,
 'pending status shown': 'status_failed' in repo and 'status_sending' in repo,
 'compose opens conversation after accepted/pending': 'startActivity(conversation)' in compose and 'hasPending' in compose,
 'thread id created for new recipient': 'getOrCreateThreadId' in repo,
 'main observes pending state': 'pendingListener' in main and 'registerOnSharedPreferenceChangeListener(pendingListener)' in main,
 'retention off/24h/2d/4d/7d/14d': all(x in ret for x in ['"24h"','"2d"','"4d"','"7d"','"14d"','OFF="off"']),
 'rolling SMS deletion': 'Telephony.Sms.DATE+"<?"' in ret,
 'rolling MMS deletion': 'Telephony.Mms.DATE+"<?"' in ret,
 'pending retention cleanup': 'removeOlderThan(cutoff)' in ret,
 'retention periodic background job': 'setPeriodic(PERIOD_MS)' in ret and 'extends JobService' in job,
 'retention persisted': '.setPersisted(true)' in ret,
 'retention restore at app start': 'MessageRetentionManager.restore(this)' in (root/'src/com/lemenzo/messenger/LemenzoMessengerApp.java').read_text(),
 'retention job protected': 'android.permission.BIND_JOB_SERVICE' in manifest,
 'persisted job permission': 'android.permission.RECEIVE_BOOT_COMPLETED' in manifest,
 'retention user explanation': 'Deleted messages cannot be restored' in strings and 'historical communication data' in strings,
 'retention setting wired': 'PREF_MESSAGE_RETENTION' in settings and 'showRetentionDialog' in settings,
}
bad=[k for k,v in checks.items() if not v]
if bad: raise SystemExit('FAIL: '+', '.join(bad))
print('LEMENZO MESSAGES V5.0 FEATURE VALIDATION: PASS')
for k in checks: print(' -',k)
