//
//  Copyright (C) 2021 Greg Landrum
//
//   @@ All Rights Reserved @@
//  This file is part of the RDKit.
//  The contents are covered by the terms of the BSD license
//  which is included in the file license.txt, found at the root
//  of the RDKit source tree.
//

namespace defaults {
// The default list of AcidBasePairs, sorted from strongest to weakest.
// This list is derived from the Food and Drug: Administration Substance
// Registration System Standard Operating Procedure guide.
//
//	Name	Acid	Base
const std::vector<std::tuple<std::string, std::string, std::string>>
    defaultAcidBasePairs{
        std::make_tuple(std::string("-OSO3H"), std::string("OS(=O)(=O)[OH]"), std::string("OS(=O)(=O)[O-]")),
        std::make_tuple(std::string("-SO3H"), std::string("[!O]S(=O)(=O)[OH]"), std::string("[!O]S(=O)(=O)[O-]")),
        std::make_tuple(std::string("-OSO2H"), std::string("O[SD3](=O)[OH]"), std::string("O[SD3](=O)[O-]")),
        std::make_tuple(std::string("-SO2H"), std::string("[!O][SD3](=O)[OH]"), std::string("[!O][SD3](=O)[O-]")),
        std::make_tuple(std::string("-OPO3H2"), std::string("OP(=O)([OH])[OH]"), std::string("OP(=O)([OH])[O-]")),
        std::make_tuple(std::string("-PO3H2"), std::string("[!O]P(=O)([OH])[OH]"), std::string("[!O]P(=O)([OH])[O-]")),
        std::make_tuple(std::string("-CO2H"), std::string("C(=O)[OH]"), std::string("C(=O)[O-]")),
        std::make_tuple(std::string("thiophenol"), std::string("c[SH]"), std::string("c[S-]")),
        std::make_tuple(std::string("(-OPO3H)-"), std::string("OP(=O)([O-])[OH]"), std::string("OP(=O)([O-])[O-]")),
        std::make_tuple(std::string("(-PO3H)-"), std::string("[!O]P(=O)([O-])[OH]"), std::string("[!O]P(=O)([O-])[O-]")),
        std::make_tuple(std::string("phthalimide"), std::string("O=C2c1ccccc1C(=O)[NH]2"), std::string("O=C2c1ccccc1C(=O)[N-]2")),
        std::make_tuple(std::string("CO3H (peracetyl)"), std::string("C(=O)O[OH]"), std::string("C(=O)O[O-]")),
        std::make_tuple(std::string("alpha-carbon-hydrogen-nitro group"), std::string("O=N(O)[CH]"), std::string("O=N(O)[C-]")),
        std::make_tuple(std::string("-SO2NH2"), std::string("S(=O)(=O)[NH2]"), std::string("S(=O)(=O)[NH-]")),
        std::make_tuple(std::string("-OBO2H2"), std::string("OB([OH])[OH]"), std::string("OB([OH])[O-]")),
        std::make_tuple(std::string("-BO2H2"), std::string("[!O]B([OH])[OH]"), std::string("[!O]B([OH])[O-]")),
        std::make_tuple(std::string("phenol"), std::string("c[OH]"), std::string("c[O-]")),
        std::make_tuple(std::string("SH (aliphatic)"), std::string("C[SH]"), std::string("C[S-]")),
        std::make_tuple(std::string("(-OBO2H)-"), std::string("OB([O-])[OH]"), std::string("OB([O-])[O-]")),
        std::make_tuple(std::string("(-BO2H)-"), std::string("[!O]B([O-])[OH]"), std::string("[!O]B([O-])[O-]")),
        std::make_tuple(std::string("cyclopentadiene"), std::string("C1=CC=C[CH2]1"), std::string("c1ccc[cH-]1")),
        std::make_tuple(std::string("-CONH2"), std::string("C(=O)[NH2]"), std::string("C(=O)[NH-]")),
        std::make_tuple(std::string("imidazole"), std::string("c1cnc[nH]1"), std::string("c1cnc[n-]1")),
        std::make_tuple(std::string("-OH (aliphatic alcohol)"), std::string("[CX4][OH]"), std::string("[CX4][O-]")),
        std::make_tuple(std::string("alpha-carbon-hydrogen-keto group"), std::string("O=C([!O])[C!H0+0]"),
         std::string("O=C([!O])[C-]")),
        std::make_tuple(std::string("alpha-carbon-hydrogen-acetyl ester group"), std::string("OC(=O)[C!H0+0]"),
         std::string("OC(=O)[C-]")),
        std::make_tuple(std::string("sp carbon hydrogen"), std::string("C#[CH]"), std::string("C#[C-]")),
        std::make_tuple(std::string("alpha-carbon-hydrogen-sulfone group"), std::string("CS(=O)(=O)[C!H0+0]"),
         std::string("CS(=O)(=O)[C-]")),
        std::make_tuple(std::string("alpha-carbon-hydrogen-sulfoxide group"), std::string("C[SD3](=O)[C!H0+0]"),
         std::string("C[SD3](=O)[C-]")),
        std::make_tuple(std::string("-NH2"), std::string("[CX4][NH2]"), std::string("[CX4][NH-]")),
        std::make_tuple(std::string("benzyl hydrogen"), std::string("c[CX4H2]"), std::string("c[CX3H-]")),
        std::make_tuple(std::string("sp2-carbon hydrogen"), std::string("[CX3]=[CX3!H0+0]"), std::string("[CX3]=[CX2-]")),
        std::make_tuple(std::string("sp3-carbon hydrogen"), std::string("[CX4!H0+0]"), std::string("[CX3-]"))};
} // namespace defaults