import { NAV_INNER_PX } from '../../utils/navMetrics';

const HOME_TAB_URL = '/pages/home/home';
const TAB_BAR_ROUTES = new Set([
    'pages/home/home',
    'pages/age/age',
    'pages/favorites/favorites',
    'pages/profile/profile',
]);

Component({
    options: { multipleSlots: true },
    properties: {
        title: { type: String, value: '' },
        background: { type: String, value: '' },
    },
    data: {
        statusBarHeight: 0,
        navBlockHeight: 0,
        leftActionType: 'none',
    },
    lifetimes: {
        attached() {
            const { statusBarHeight } = wx.getWindowInfo();
            this.setData({
                statusBarHeight,
                navBlockHeight: statusBarHeight + NAV_INNER_PX,
            });
            this.syncLeftAction();
        },
    },
    pageLifetimes: {
        show() {
            this.syncLeftAction();
        },
    },
    methods: {
        syncLeftAction() {
            const pages = getCurrentPages();
            const currentRoute = pages[pages.length - 1]?.route || '';
            const isTabBarPage = TAB_BAR_ROUTES.has(currentRoute);

            let leftActionType: 'none' | 'back' | 'home' = 'none';

            if (pages.length > 1) {
                leftActionType = 'back';
            } else if (!isTabBarPage) {
                leftActionType = 'home';
            }

            this.setData({ leftActionType });
        },

        handleLeftAction() {
            if (this.data.leftActionType === 'back') {
                wx.navigateBack({
                    fail: () => {
                        wx.switchTab({ url: HOME_TAB_URL });
                    },
                });
                return;
            }

            if (this.data.leftActionType === 'home') {
                wx.switchTab({ url: HOME_TAB_URL });
            }
        },
    },
});
