package com.lemenzo.messenger.mms;

import android.content.Context;
import android.net.Uri;
import android.provider.Telephony;
import com.google.android.mms.ContentType;
import com.google.android.mms.MmsException;
import com.google.android.mms.pdu.EncodedStringValue;
import com.google.android.mms.pdu.GenericPdu;
import com.google.android.mms.pdu.PduBody;
import com.google.android.mms.pdu.PduParser;
import com.google.android.mms.pdu.PduPart;
import com.google.android.mms.pdu.PduPersister;
import com.google.android.mms.pdu.RetrieveConf;
import java.nio.charset.StandardCharsets;

public final class MmsPduUtils {
    private MmsPduUtils() {}

    public static GenericPdu parse(byte[] pdu) {
        if (pdu == null || pdu.length == 0) return null;
        return new PduParser(pdu, true).parse();
    }

    public static Uri persistIncoming(Context context, RetrieveConf retrieveConf)
            throws MmsException {
        return PduPersister.getPduPersister(context).persist(
                retrieveConf,
                Telephony.Mms.Inbox.CONTENT_URI,
                true,
                true,
                null);
    }

    public static Uri persistSent(Context context, GenericPdu pdu) throws MmsException {
        return PduPersister.getPduPersister(context).persist(
                pdu,
                Telephony.Mms.Sent.CONTENT_URI,
                true,
                true,
                null);
    }

    public static String sender(RetrieveConf conf) {
        EncodedStringValue from = conf == null ? null : conf.getFrom();
        return from == null ? "" : from.getString();
    }

    public static String subject(RetrieveConf conf) {
        EncodedStringValue subject = conf == null ? null : conf.getSubject();
        return subject == null ? "" : subject.getString();
    }

    public static String text(RetrieveConf conf) {
        if (conf == null || conf.getBody() == null) return "";
        StringBuilder out = new StringBuilder();
        PduBody body = conf.getBody();
        for (int i = 0; i < body.getPartsNum(); i++) {
            PduPart part = body.getPart(i);
            if (part == null || part.getContentType() == null) continue;
            String type = new String(part.getContentType(), StandardCharsets.ISO_8859_1);
            if (ContentType.TEXT_PLAIN.equalsIgnoreCase(type)) {
                byte[] data = part.getData();
                if (data != null && data.length > 0) {
                    if (out.length() > 0) out.append('\n');
                    out.append(new String(data, StandardCharsets.UTF_8));
                }
            }
        }
        return out.toString();
    }
}
