package com.lemenzo.gallery.details;

import android.app.Activity;
import android.app.Dialog;
import android.view.Gravity;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.TextView;

import com.lemenzo.gallery.R;
import com.lemenzo.gallery.model.MediaDetails;
import com.lemenzo.gallery.model.MediaItem;
import com.lemenzo.gallery.model.MediaType;
import com.lemenzo.gallery.util.FileSizeUtils;
import com.lemenzo.gallery.util.MediaUtils;

import java.text.DateFormat;
import java.util.Date;

public final class MediaDetailsBottomSheet {
    private MediaDetailsBottomSheet() {}

    public static void show(Activity activity, MediaItem media) {
        Dialog dialog = new Dialog(activity);
        dialog.setContentView(R.layout.bottom_sheet_media_details);
        TextView text = dialog.findViewById(R.id.details_text);
        MediaDetails details = media.type == MediaType.IMAGE
                ? ExifReader.read(activity, media.uri) : new MediaDetails();
        StringBuilder out = new StringBuilder();
        line(out, activity.getString(R.string.file_name), media.displayName);
        line(out, activity.getString(R.string.date),
                DateFormat.getDateTimeInstance().format(new Date(media.sortDate())));
        line(out, activity.getString(R.string.resolution), media.width + " × " + media.height);
        line(out, activity.getString(R.string.file_size), FileSizeUtils.format(media.size));
        line(out, activity.getString(R.string.album), media.bucketName);
        line(out, activity.getString(R.string.mime_type), media.mimeType);
        if (media.type == MediaType.VIDEO) {
            line(out, activity.getString(R.string.duration), MediaUtils.formatDuration(media.duration));
        }
        String camera = (details.cameraMake + " " + details.cameraModel).trim();
        line(out, activity.getString(R.string.camera), camera);
        line(out, activity.getString(R.string.lens), details.lensModel);
        line(out, activity.getString(R.string.aperture), details.aperture.isEmpty() ? "" : "f/" + details.aperture);
        line(out, activity.getString(R.string.exposure_time), details.exposureTime);
        line(out, activity.getString(R.string.iso), details.iso);
        line(out, activity.getString(R.string.focal_length), details.focalLength);
        if (!details.latitude.isEmpty() && !details.longitude.isEmpty()) {
            line(out, activity.getString(R.string.location), details.latitude + ", " + details.longitude);
        }
        text.setText(out.toString().trim());
        Window window = dialog.getWindow();
        if (window != null) window.setBackgroundDrawableResource(android.R.color.transparent);
        dialog.show();
        if (window != null) {
            window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            window.setGravity(Gravity.BOTTOM);
        }
    }

    private static void line(StringBuilder out, String key, String value) {
        if (value != null && !value.trim().isEmpty()) {
            out.append(key).append('\n').append(value).append("\n\n");
        }
    }
}
