import rawStacktraceContent from 'sentry/components/events/interfaces/crashContent/stackTrace/rawContent';
import {Event} from 'sentry/types/event';

export default function getStacktraceBody(event: Event) {
  if (!event || !event.entries) {
    return [];
  }

  // TODO(billyvg): This only accounts for the first exception, will need navigation to be able to
  // diff multiple exceptions
  //
  // See: https://github.com/getsentry/sentry/issues/6055
  const exc = event.entries.find(({type}) => type === 'exception');

  if (!exc) {
    // Look for a message if not an exception
    const msg = event.entries.find(({type}) => type === 'message');
    if (!msg) {
      return [];
    }
    return msg?.data?.formatted && [msg.data.formatted];
  }

  if (!exc.data) {
    return [];
  }

  // TODO(ts): This should be verified when EntryData has the correct type
  return exc.data.values
    .filter(value => !!value.stacktrace)
    .map(value => rawStacktraceContent(value.stacktrace, event.platform, value))
    .reduce((acc, value) => acc.concat(value), []);
}