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

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef FXBARCODE_CFX_BARCODE_H_
#define FXBARCODE_CFX_BARCODE_H_

#include <stdint.h>

#include <memory>

#include "core/fxcrt/widestring.h"
#include "core/fxge/dib/fx_dib.h"
#include "fxbarcode/BC_Library.h"

class CBC_CodeBase;
class CFX_Font;
class CFX_RenderDevice;
class CFX_Matrix;

class CFX_Barcode {
 public:
  explicit CFX_Barcode(BC_TYPE type);
  ~CFX_Barcode();

  BC_TYPE GetType();
  bool Encode(WideStringView contents);

  bool RenderDevice(CFX_RenderDevice* device, const CFX_Matrix& matrix);

  bool SetModuleHeight(int32_t moduleHeight);
  bool SetModuleWidth(int32_t moduleWidth);
  void SetHeight(int32_t height);
  void SetWidth(int32_t width);

  bool SetPrintChecksum(bool checksum);
  bool SetDataLength(int32_t length);
  bool SetCalChecksum(bool state);

  bool SetFont(CFX_Font* font);
  bool SetFontSize(float size);
  bool SetFontColor(FX_ARGB color);

  void SetTextLocation(BC_TEXT_LOC location);
  bool SetWideNarrowRatio(int8_t ratio);
  bool SetStartChar(char start);
  bool SetEndChar(char end);
  bool SetErrorCorrectionLevel(int32_t level);

 private:
  const std::unique_ptr<CBC_CodeBase> bc_engine_;
};

#endif  // FXBARCODE_CFX_BARCODE_H_
