<template>
  <v-app full-height>
    <v-navigation-drawer
      v-model="drawer"
      :location="mdAndDown ? 'bottom' : undefined"
    >
      <v-img v-if="!mdAndDown" src="/Port_Nimara_Logo_2_Colour_New_Transparent.png" height="75" class="my-6" />

      <v-list color="primary" lines="two">
        <v-list-item
          v-for="(item, index) in menu"
          :key="index"
          :to="item.to"
          :title="item.title"
          :prepend-icon="item.icon"
        />
      </v-list>

      <template #append>
        <v-list lines="two">
          <v-list-item
            v-if="user"
            :title="user.name"
            :subtitle="user.email"
            prepend-icon="mdi-account"
          >
            <template #append>
              <v-chip v-if="user.tier && user.tier !== 'basic'" size="small" color="primary">
                {{ user.tier }}
              </v-chip>
            </template>
          </v-list-item>
          <v-list-item
            @click="logOut"
            title="Log out"
            prepend-icon="mdi-logout"
            base-color="error"
          />
        </v-list>
      </template>
    </v-navigation-drawer>

    <v-app-bar v-if="mdAndDown" elevation="2">
      <template #prepend>
        <v-app-bar-nav-icon variant="text" @click.stop="drawer = !drawer" />
      </template>

      <v-img src="/Port_Nimara_Logo_2_Colour_New_Transparent.png" height="50" />

      <template #append>
        <v-btn
          @click="logOut"
          class="mr-3"
          variant="text"
          color="error"
          icon="mdi-logout"
        />
      </template>
    </v-app-bar>

    <v-main>
      <router-view />
    </v-main>
  </v-app>
</template>

<script setup>
definePageMeta({
  middleware: ["authentication"],
  layout: false,
});

const { mdAndDown } = useDisplay();
const { user, logout, authSource } = useUnifiedAuth();
const authUtils = useAuthorization();
const tags = usePortalTags();

const drawer = ref(false);

// Safe wrapper for auth functions
const safeIsAdmin = () => {
  try {
    return authUtils.isAdmin();
  } catch (error) {
    console.error('[Dashboard] Error checking admin status:', error);
    return false;
  }
};

const safeGetUserGroups = () => {
  try {
    return authUtils.getUserGroups();
  } catch (error) {
    console.error('[Dashboard] Error getting user groups:', error);
    return [];
  }
};

const safeGetCurrentUser = () => {
  try {
    return authUtils.getCurrentUser();
  } catch (error) {
    console.error('[Dashboard] Error getting current user:', error);
    return null;
  }
};

// Debug auth state
onMounted(() => {
  nextTick(() => {
    console.log('[Dashboard] Auth state on mount:', {
      isAdmin: safeIsAdmin(),
      userGroups: safeGetUserGroups(),
      currentUser: safeGetCurrentUser()
    });
  });
});

const interestMenu = computed(() => {
  try {
    const userIsAdmin = safeIsAdmin();
    const userGroups = safeGetUserGroups();
    
    console.log('[Dashboard] Computing interest menu - isAdmin:', userIsAdmin, 'groups:', userGroups);
    
    const baseMenu = [
      //{
      //  to: "/dashboard/interest-eoi-queue",
      //  icon: "mdi-tray-full",
      //  title: "EOI Queue",
      //},
      {
        to: "/dashboard/interest-analytics",
        icon: "mdi-view-dashboard",
        title: "Analytics",
      },
      {
        to: "/dashboard/interest-berth-list",
        icon: "mdi-table",
        title: "Berth List",
      },
      {
        to: "/dashboard/interest-berth-status",
        icon: "mdi-sail-boat",
        title: "Berth Status",
      },
      {
        to: "/dashboard/interest-list",
        icon: "mdi-view-list",
        title: "Interest List",
      },
      {
        to: "/dashboard/interest-status",
        icon: "mdi-account-check",
        title: "Interest Status",
      },
      {
        to: "/dashboard/expenses",
        icon: "mdi-receipt",
        title: "Expenses",
      },
      {
        to: "/dashboard/file-browser",
        icon: "mdi-folder",
        title: "File Browser",
      },
    ];

    // Add admin menu items if user is admin
    if (userIsAdmin) {
      console.log('[Dashboard] Adding admin console to interest menu');
      baseMenu.push({
        to: "/dashboard/admin",
        icon: "mdi-shield-crown",
        title: "Admin Console",
      });
    }

    return baseMenu;
  } catch (error) {
    console.error('[Dashboard] Error computing interest menu:', error);
    // Return basic menu without admin items on error
    return [
      {
        to: "/dashboard/interest-analytics",
        icon: "mdi-view-dashboard",
        title: "Analytics",
      },
      {
        to: "/dashboard/interest-list",
        icon: "mdi-view-list",
        title: "Interest List",
      },
    ];
  }
});

const defaultMenu = computed(() => {
  try {
    const userIsAdmin = safeIsAdmin();
    const userGroups = safeGetUserGroups();
    
    console.log('[Dashboard] Computing default menu - isAdmin:', userIsAdmin, 'groups:', userGroups);
    
    const baseMenu = [
      {
        to: "/dashboard/site",
        icon: "mdi-view-dashboard",
        title: "Site Analytics",
      },
      {
        to: "/dashboard/data",
        icon: "mdi-finance",
        title: "Data Analytics",
      },
      {
        to: "/dashboard/file-browser",
        icon: "mdi-folder",
        title: "File Browser",
      },
    ];

    // Add admin menu items if user is admin
    if (userIsAdmin) {
      console.log('[Dashboard] Adding admin console to default menu');
      baseMenu.push({
        to: "/dashboard/admin",
        icon: "mdi-shield-crown",
        title: "Admin Console",
      });
    }

    return baseMenu;
  } catch (error) {
    console.error('[Dashboard] Error computing default menu:', error);
    // Return basic menu without admin items on error
    return [
      {
        to: "/dashboard/site",
        icon: "mdi-view-dashboard",
        title: "Site Analytics",
      },
      {
        to: "/dashboard/data",
        icon: "mdi-finance",
        title: "Data Analytics",
      },
    ];
  }
});

const menu = computed(() =>
  toValue(tags).interest ? interestMenu : defaultMenu
);

const logOut = async () => {
  await logout();
  return navigateTo("/login");
};

onMounted(() => {
  if (mdAndDown.value) {
    return;
  }

  drawer.value = true;
})
</script>
