#include "selfdrive/ui/qt/maps/map_panel.h"

#include <QHBoxLayout>
#include <QWidget>

#include "selfdrive/ui/qt/maps/map.h"
#include "selfdrive/ui/qt/maps/map_settings.h"
#include "selfdrive/ui/qt/util.h"
#include "selfdrive/ui/ui.h"

MapPanel::MapPanel(const QMapLibre::Settings &mapboxSettings, QWidget *parent) : QFrame(parent) {
  content_stack = new QStackedLayout(this);
  content_stack->setContentsMargins(0, 0, 0, 0);

  auto map = new MapWindow(mapboxSettings);
  QObject::connect(uiState(), &UIState::offroadTransition, map, &MapWindow::offroadTransition);
  QObject::connect(device(), &Device::interactiveTimeout, this, [=]() {
    content_stack->setCurrentIndex(0);
  });
  QObject::connect(map, &MapWindow::requestVisible, this, [=](bool visible) {
    // when we show the map for a new route, signal HomeWindow to hide the sidebar
    if (visible) { emit mapPanelRequested(); }
    setVisible(visible);
  });
  QObject::connect(map, &MapWindow::requestSettings, this, [=](bool settings) {
    content_stack->setCurrentIndex(settings ? 1 : 0);
  });
  content_stack->addWidget(map);

  auto settings = new MapSettings(true, parent);
  QObject::connect(settings, &MapSettings::closeSettings, this, [=]() {
    content_stack->setCurrentIndex(0);
  });
  content_stack->addWidget(settings);
}

void MapPanel::toggleMapSettings() {
  // show settings if not visible, then toggle between map and settings
  int new_index = isVisible() ? (1 - content_stack->currentIndex()) : 1;
  content_stack->setCurrentIndex(new_index);
  emit mapPanelRequested();
  show();
}
