// Copyright 2022 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "core/fpdfdoc/cpdf_bafontmap.h"

#include <utility>

#include "build/build_config.h"
#include "constants/annotation_common.h"
#include "core/fpdfapi/font/cpdf_font.h"
#include "core/fpdfapi/page/test_with_page_module.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_name.h"
#include "core/fpdfapi/parser/cpdf_string.h"
#include "core/fpdfapi/parser/cpdf_test_document.h"

using BAFontMapTest = TestWithPageModule;

TEST_F(BAFontMapTest, DefaultFont) {
  // Without any font resources, CPDF_BAFontMap generates a default font.
  CPDF_TestDocument doc;

  auto annot_dict = pdfium::MakeRetain<CPDF_Dictionary>();
  annot_dict->SetNewFor<CPDF_Name>(pdfium::annotation::kSubtype, "Widget");
  annot_dict->SetNewFor<CPDF_String>("DA", "0 0 0 rg /F1 12 Tf",
                                     /*bHex=*/false);

  CPDF_BAFontMap font_map(&doc, std::move(annot_dict), "N");
#if !BUILDFLAG(IS_WIN)
  // TODO(thestig): Figure out why this does not work on Windows.
  EXPECT_EQ(font_map.GetPDFFontAlias(0), "Helvetica_00");
#endif
  RetainPtr<CPDF_Font> font = font_map.GetPDFFont(0);
  ASSERT_TRUE(font);
  EXPECT_TRUE(font->IsType1Font());
  EXPECT_EQ(font->GetBaseFontName(), "Helvetica");
}

TEST_F(BAFontMapTest, Bug853238) {
  CPDF_TestDocument doc;
  auto root_dict = pdfium::MakeRetain<CPDF_Dictionary>();
  auto* acroform_dict = root_dict->SetNewFor<CPDF_Dictionary>("AcroForm");
  auto* annot_dr_dict = acroform_dict->SetNewFor<CPDF_Dictionary>("DR");
  auto* annot_font_dict = annot_dr_dict->SetNewFor<CPDF_Dictionary>("Font");
  auto* annot_font_f1_dict = annot_font_dict->SetNewFor<CPDF_Dictionary>("F1");
  annot_font_f1_dict->SetNewFor<CPDF_Name>("Type", "Font");
  annot_font_f1_dict->SetNewFor<CPDF_Name>("Subtype", "Type1");
  annot_font_f1_dict->SetNewFor<CPDF_Name>("BaseFont", "Times-Roman");
  doc.SetRoot(root_dict.Get());

  auto annot_dict = pdfium::MakeRetain<CPDF_Dictionary>();
  annot_dict->SetNewFor<CPDF_Name>(pdfium::annotation::kSubtype, "Widget");
  annot_dict->SetNewFor<CPDF_String>("DA", "0 0 0 rg /F1 12 Tf",
                                     /*bHex=*/false);

  CPDF_BAFontMap font_map(&doc, std::move(annot_dict), "N");
  EXPECT_EQ(font_map.GetPDFFontAlias(0), "F1");
  RetainPtr<CPDF_Font> font = font_map.GetPDFFont(0);
  ASSERT_TRUE(font);
  EXPECT_TRUE(font->IsType1Font());
  EXPECT_EQ(font->GetBaseFontName(), "Times-Roman");
}
