local nvim_get_hl = require('solarized.utils').nvim_get_hl

describe('solarized.setup', function()
  setup(function()
    vim.o.background = 'light'
    ---@type solarized
    local solarized = require 'solarized'

    solarized.setup {
      transparent = {
        enabled = true,
      },
      styles = {
        strings = { italic = true },
        comments = { bold = true },
      },
      on_colors = function()
        return {
          mycolor = '#ffffff',
        }
      end,
      on_highlights = function(colors)
        return {
          ---@diagnostic disable-next-line: undefined-field
          CustomHighlight = { fg = colors.mycolor },
        }
      end,
    }
    vim.cmd 'colorscheme solarized'
  end)

  test('transparent', function()
    local normal = nvim_get_hl 'Normal'
    assert.falsy(normal.bg)
  end)

  test('on_colors and on_highlight', function()
    local user_group = nvim_get_hl 'CustomHighlight'
    local expected = { fg = '#FFFFFF' }
    assert.are.same(expected, user_group)
  end)

  test('styles', function()
    local strings = nvim_get_hl 'String'
    local comments = nvim_get_hl 'Comment'
    assert.True(strings.italic)
    assert.True(comments.bold)
  end)

  test('styles.enabled', function()
    local solarized = require 'solarized'
    solarized.setup {
      styles = {
        enabled = false,
        strings = { italic = true },
        comments = { bold = true },
      },
    }
    vim.cmd 'colorscheme solarized'

    local strings = nvim_get_hl 'String'
    local comments = nvim_get_hl 'Comment'
    assert.Nil(strings.italic)
    assert.Nil(comments.bold)
  end)

  test('nil config', function()
    local solarized = require 'solarized'
    solarized.setup()
    vim.cmd 'colorscheme solarized'
  end)
end)
