describe('Body - Health Check-in (身体-健康打卡)', () => {
  beforeEach(() => {
    cy.visit('/body', {
      onBeforeLoad(win) {
        win.localStorage.setItem('sp_login_expires', String(Date.now() + 86400000))
      }
    })
    cy.get('header').should('be.visible')
  })

  it('shows 4 sub tabs', () => {
    cy.get('.sub-tab').should('have.length', 4)
    cy.get('.sub-tab').eq(0).should('contain', '健康打卡')
    cy.get('.sub-tab').eq(1).should('contain', '睡眠')
    cy.get('.sub-tab').eq(2).should('contain', '健身')
    cy.get('.sub-tab').eq(3).should('contain', '经期')
  })

  it('defaults to health check-in tab', () => {
    cy.get('.sub-tab').contains('健康打卡').should('have.class', 'active')
  })

  it('shows today date and check-in section', () => {
    cy.get('.section-header').should('contain', '今日打卡')
    cy.get('.date-label').should('not.be.empty')
  })

  it('adds a health item to pool', () => {
    cy.get('.add-row input').type('维生素D')
    cy.get('.add-row .btn-accent').click()
    cy.get('.pool-item').should('contain', '维生素D')
  })

  it('toggles item into/out of monthly plan', () => {
    cy.get('.add-row input').type('益生菌')
    cy.get('.add-row .btn-accent').click()
    cy.get('.pool-item').contains('益生菌').click()
    // Item should now appear in today checkin grid
    cy.get('.checkin-item').should('contain', '益生菌')
  })

  it('checks in a health item', () => {
    cy.get('.add-row input').type('打卡测试项')
    cy.get('.add-row .btn-accent').click()
    cy.get('.pool-item').contains('打卡测试项').click()
    cy.get('.checkin-item').contains('打卡测试项').click()
    cy.get('.checkin-item').contains('打卡测试项').should('have.class', 'checked')
  })

  it('unchecks a health item', () => {
    cy.get('.add-row input').type('取消打卡项')
    cy.get('.add-row .btn-accent').click()
    cy.get('.pool-item').contains('取消打卡项').click()
    cy.get('.checkin-item').contains('取消打卡项').click()
    cy.get('.checkin-item').contains('取消打卡项').should('have.class', 'checked')
    cy.get('.checkin-item').contains('取消打卡项').click()
    cy.get('.checkin-item').contains('取消打卡项').should('not.have.class', 'checked')
  })

  it('deletes a health item from pool', () => {
    cy.get('.add-row input').type('删除测试项')
    cy.get('.add-row .btn-accent').click()
    cy.get('.pool-item').contains('删除测试项').parent().find('.remove-btn').click()
    cy.get('.pool-item').should('not.contain', '删除测试项')
  })

  it('shows empty hint when no plan items', () => {
    cy.get('.body-layout').should('be.visible')
  })
})
