describe('App Loading', () => {
  it('shows login overlay when not authenticated', () => {
    cy.visit('/')
    cy.get('.login-overlay').should('be.visible')
    cy.contains('Hera\'s Planner').should('be.visible')
  })

  it('login overlay has password input and submit button', () => {
    cy.visit('/')
    cy.get('.login-input[type="password"]').should('be.visible')
    cy.get('.login-btn').should('be.visible')
  })

  it('shows login error for wrong password', () => {
    cy.visit('/')
    cy.get('.login-input').type('wrongpassword')
    cy.get('.login-btn').click()
    cy.get('.login-error').should('not.be.empty')
  })

  it('loads main app after successful login', () => {
    cy.visit('/', {
      onBeforeLoad(win) {
        win.localStorage.setItem('sp_login_expires', String(Date.now() + 86400000))
      }
    })
    cy.get('.login-overlay').should('not.exist')
    cy.get('header').should('be.visible')
    cy.contains("Hera's Planner").should('be.visible')
  })

  it('shows all 7 navigation tabs', () => {
    cy.visit('/', {
      onBeforeLoad(win) {
        win.localStorage.setItem('sp_login_expires', String(Date.now() + 86400000))
      }
    })
    cy.get('.tab-btn').should('have.length', 7)
    cy.get('.tab-btn').eq(0).should('contain', '随手记')
    cy.get('.tab-btn').eq(1).should('contain', '待办')
    cy.get('.tab-btn').eq(2).should('contain', '提醒')
    cy.get('.tab-btn').eq(3).should('contain', '身体')
    cy.get('.tab-btn').eq(4).should('contain', '音乐')
    cy.get('.tab-btn').eq(5).should('contain', '文档')
    cy.get('.tab-btn').eq(6).should('contain', '日程')
  })

  it('header menu button opens dropdown', () => {
    cy.visit('/', {
      onBeforeLoad(win) {
        win.localStorage.setItem('sp_login_expires', String(Date.now() + 86400000))
      }
    })
    cy.get('.header-menu-btn').click()
    cy.get('.header-dropdown.open').should('be.visible')
    cy.contains('退出登录').should('be.visible')
    cy.contains('修改密码').should('be.visible')
    cy.contains('导出数据').should('be.visible')
    cy.contains('手动备份').should('be.visible')
  })
})
