import { describe, it, expect, vi } from 'vitest'

vi.mock('@/api/http', () => ({
  default: {
    get: vi.fn(() => Promise.resolve({})),
    post: vi.fn(() => Promise.resolve({})),
    put: vi.fn(() => Promise.resolve({})),
    delete: vi.fn(() => Promise.resolve({})),
  },
}))

import http from '@/api/http'
import { accountApi } from '@/api/accountApi'

describe('accountApi 가계부 CRUD 와이어링', () => {
  it('list → GET /account/entries (필터 params)', () => {
    accountApi.list({ year: 2026, month: 6, type: 'EXPENSE' })
    expect(http.get).toHaveBeenCalledWith('/account/entries', {
      params: { year: 2026, month: 6, type: 'EXPENSE', category: undefined, walletId: undefined, keyword: undefined, tagId: undefined },
    })
  })

  it('create → POST /account/entries', () => {
    const payload = { type: 'EXPENSE', amount: 1000, category: '식비' }
    accountApi.create(payload)
    expect(http.post).toHaveBeenCalledWith('/account/entries', payload)
  })

  it('update → PUT /account/entries/:id', () => {
    accountApi.update(42, { amount: 2000 })
    expect(http.put).toHaveBeenCalledWith('/account/entries/42', { amount: 2000 })
  })

  it('remove → DELETE /account/entries/:id', () => {
    accountApi.remove(42)
    expect(http.delete).toHaveBeenCalledWith('/account/entries/42')
  })

  it('summary → GET /account/summary', () => {
    accountApi.summary({ year: 2026, month: 6 })
    expect(http.get).toHaveBeenCalledWith('/account/summary', { params: { year: 2026, month: 6 } })
  })

  it('netWorth → GET /account/networth', () => {
    accountApi.netWorth()
    expect(http.get).toHaveBeenCalledWith('/account/networth')
  })

  it('budgetStatus → GET /account/budgets/status', () => {
    accountApi.budgetStatus({ year: 2026, month: 6 })
    expect(http.get).toHaveBeenCalledWith('/account/budgets/status', { params: { year: 2026, month: 6 } })
  })

  it('pendingCount → GET /account/entries/pending/count', () => {
    accountApi.pendingCount()
    expect(http.get).toHaveBeenCalledWith('/account/entries/pending/count')
  })

  it('confirmEntry → POST /account/entries/:id/confirm (payload 기본값 {})', () => {
    accountApi.confirmEntry(7)
    expect(http.post).toHaveBeenCalledWith('/account/entries/7/confirm', {})
  })

  it('createWallet → POST /account/wallets', () => {
    const payload = { name: '주거래', type: 'ASSET' }
    accountApi.createWallet(payload)
    expect(http.post).toHaveBeenCalledWith('/account/wallets', payload)
  })
})
