local ADDON_NAME = ...
---@cast ADDON_NAME string

---@class AddonPrivate
local Private = select(2, ...)

local constants = {}
Private.constants = constants

constants.ADDON_NAME = ADDON_NAME
constants.ADDON_VERSION = C_AddOns and C_AddOns.GetAddOnMetadata(ADDON_NAME, "Version")
constants.ADDON_MEDIA_PATH = [[Interface\AddOns\]] .. constants.ADDON_NAME .. [[\Media]]
constants.INTERFACE_VERSION = select(4, GetBuildInfo())

constants.MEDIA = {
    TEXTURES = {
        LOGO = constants.ADDON_MEDIA_PATH .. [[\Textures\Logo.tga]],
    },
}

constants.SETTINGS = {
    TYPES = {
        BOOLEAN = "boolean",
        NUMBER = "number",
        STRING = "string",
    }
}

constants.EVENTS_FRAMES = {
    ["QUEST_COMPLETE"] = {
        "QuestInfoRewardText"
    },
    ["QUEST_DETAIL"] = {
        "QuestInfoDescriptionText"
    },
    ["QUEST_PROGRESS"] = {
        "QuestProgressText"
    },
    ["GOSSIP_SHOW"] = {},
}

constants.DICT = {
    MARK_START = "\001",
    MARK_MID   = "\002",
    MARK_END   = "\003",
    WORDS = {
        -- The "Th" to "D" replacements
        ["da"] = "the",
        ["Da"] = "The",
        ["de"] = "the",
        ["De"] = "The",
        ["dis"] = "this",
        ["Dis"] = "This",
        ["dat"] = "that",
        ["Dat"] = "That",
        ["dere"] = "there",
        ["Dere"] = "There",
        ["dem"] = "them",
        ["Dem"] = "Them",
        ["den"] = "then",
        ["Den"] = "Then",
        ["dey"] = "they",
        ["Dey"] = "They",
        ["dese"] = "these",
        ["Dese"] = "These",
        ["dose"] = "those",
        ["Dose"] = "Those",
        ["doze"] = "those",
        ["Doze"] = "Those",
        ["dan"] = "than",
        ["Dan"] = "Than",
        ["dough"] = "though",
        ["Dough"] = "Though",
        ["doh"] = "though",
        ["Doh"] = "Though",

        -- The "Th" to "T" replacements (Apostrophes and without)
        ["ting"] = "thing",
        ["Ting"] = "Thing",
        ["tings"] = "things",
        ["Tings"] = "Things",
        ["tink"] = "think",
        ["Tink"] = "Think",
        ["tinks"] = "thinks",
        ["Tinks"] = "Thinks",
        ["t'ing"] = "thing",
        ["T'ing"] = "Thing",
        ["t'ings"] = "things",
        ["T'ings"] = "Things",
        ["t'ink"] = "think",
        ["T'ink"] = "Think",
        ["t'ought"] = "thought",
        ["T'ought"] = "Thought",
        ["t'ief"] = "thief",
        ["T'ief"] = "Thief",
        ["t'ieves"] = "thieves",
        ["T'ieves"] = "Thieves",
        ["t'row"] = "throw",
        ["T'row"] = "Throw",
        ["t'rown"] = "thrown",
        ["T'rown"] = "Thrown",
        ["t'rough"] = "through",
        ["T'rough"] = "Through",
        ["t'under"] = "thunder",
        ["T'under"] = "Thunder",
        ["t'irst"] = "thirst",
        ["T'irst"] = "Thirst",
        ["t'irsty"] = "thirsty",
        ["T'irsty"] = "Thirsty",
        ["tree"] = "three",
        ["Tree"] = "Three",
        ["troo"] = "through",
        ["Troo"] = "Through",
        ["wit"] = "with",
        ["Wit"] = "With",
        ["wid"] = "with",
        ["Wid"] = "With",

        -- Compound "ting" words
        ["nuttin"] = "nothing",
        ["Nuttin"] = "Nothing",
        ["noting"] = "nothing",
        ["Noting"] = "Nothing",
        ["someting"] = "something",
        ["Someting"] = "Something",
        ["anyting"] = "anything",
        ["Anyting"] = "Anything",
        ["everyting"] = "everything",
        ["Everyting"] = "Everything",

        -- Pronouns & People
        ["ya"] = "you",
        ["Ya"] = "You",
        ["yer"] = "your",
        ["Yer"] = "Your",
        ["yous"] = "you",
        ["Yous"] = "You",
        ["chu"] = "you",
        ["Chu"] = "You",
        ["mon"] = "man",
        ["Mon"] = "Man",
        ["bruddah"] = "brother",
        ["Bruddah"] = "Brother",
        ["braddah"] = "brother",
        ["Braddah"] = "Brother",
        ["broddah"] = "brother",
        ["Broddah"] = "Brother",
        ["sistah"] = "sister",
        ["Sistah"] = "Sister",
        ["faddah"] = "father",
        ["Faddah"] = "Father",
        ["muddah"] = "mother",
        ["Muddah"] = "Mother",
        ["chile"] = "child",
        ["Chile"] = "Child",
        ["fella"] = "fellow",
        ["Fella"] = "Fellow",
        ["mastah"] = "master",
        ["Mastah"] = "Master",
        ["powah"] = "power",
        ["Powah"] = "Power",
        ["leadah"] = "leader",
        ["Leadah"] = "Leader",
        ["huntah"] = "hunter",
        ["Huntah"] = "Hunter",
        ["killah"] = "killer",
        ["Killah"] = "Killer",
        ["healah"] = "healer",
        ["Healah"] = "Healer",

        -- The "-er" to "-ah" endings & Others
        ["bettah"] = "better",
        ["Bettah"] = "Better",
        ["watah"] = "water",
        ["Watah"] = "Water",
        ["neva"] = "never",
        ["Neva"] = "Never",
        ["eva"] = "ever",
        ["Eva"] = "Ever",
        ["howevah"] = "however",
        ["Howevah"] = "However",
        ["ovah"] = "over",
        ["Ovah"] = "Over",
        ["undah"] = "under",
        ["Undah"] = "Under",
        ["aftah"] = "after",
        ["Aftah"] = "After",
        ["togedda"] = "together",
        ["Togedda"] = "Together",
        ["togeddah"] = "together",
        ["Togeddah"] = "Together",
        ["anodda"] = "another",
        ["Anodda"] = "Another",
        ["anoddah"] = "another",
        ["Anoddah"] = "Another",
        ["remembah"] = "remember",
        ["Remembah"] = "Remember",

        -- General Slang
        ["bout"] = "about",
        ["Bout"] = "About",
        ["cuz"] = "because",
        ["Cuz"] = "Because",
        ["gonna"] = "going to",
        ["Gonna"] = "Going to",
        ["wanna"] = "want to",
        ["Wanna"] = "Want to",
        ["lemme"] = "let me",
        ["Lemme"] = "Let me",
        ["gimme"] = "give me",
        ["Gimme"] = "Give me",
        ["outta"] = "out of",
        ["Outta"] = "Out of",
        ["kinda"] = "kind of",
        ["Kinda"] = "Kind of",
        ["sortah"] = "sort of",
        ["Sortah"] = "Sort of",
        ["dun"] = "done",
        ["Dun"] = "Done",
    },

    PARTIALS = {
        -- Common suffixes
        ["in'"] = "ing",

        -- Words starting with apostrophes
        ["'em"] = "them",
        ["'Em"] = "Them",
        ["'bout"] = "about",
        ["'Bout"] = "About",
        ["'cause"] = "because",
        ["'Cause"] = "Because",
        ["'til"] = "until",
        ["'Til"] = "Until",
        ["'ere"] = "here",
        ["'Ere"] = "Here",
        ["'ey"] = "hey",
        ["'Ey"] = "Hey",
        ["'ead"] = "head",
        ["'Ead"] = "Head",
        ["'eart"] = "heart",
        ["'Eart"] = "Heart",
        ["'ome"] = "home",
        ["'Ome"] = "Home",
        ["'ouse"] = "house",
        ["'Ouse"] = "House",
        ["'and"] = "hand",
        ["'And"] = "Hand",
        ["'elp"] = "help",
        ["'Elp"] = "Help",

        -- Multi-word grammar corrections (Troll "be" verbs)
        ["there be"] = "there are",
        ["There be"] = "There are",
        ["i be"] = "I am",
        ["I be"] = "I am",
        ["you be"] = "you are",
        ["You be"] = "You are",
        ["we be"] = "we are",
        ["We be"] = "We are",
        ["dey be"] = "they are",
        ["Dey be"] = "They are",
        ["he be"] = "he is",
        ["He be"] = "He is",
        ["she be"] = "she is",
        ["She be"] = "She is",
        ["it be"] = "it is",
        ["It be"] = "It is",

        -- Negative states
        ["does not be"] = "is not",
        ["Does not be"] = "Is not",
        ["do not be"] = "are not",
        ["Do not be"] = "Are not",
        ["not be"] = "are not",
        ["Not be"] = "Are not",

        -- Action state corrections
        ["be needin'"] = "need",
        ["Be needin'"] = "Need",
        ["be lookin'"] = "are looking",
        ["Be lookin'"] = "Are looking",
        ["be gettin'"] = "are getting",
        ["Be gettin'"] = "Are getting",
        ["be goin'"] = "are going",
        ["Be goin'"] = "Are going",
        ["be wantin'"] = "are wanting",
        ["Be wantin'"] = "Are wanting",
        ["be comin'"] = "are coming",
        ["Be comin'"] = "Are coming",
        ["be havin'"] = "have",
        ["Be havin'"] = "Have",
        ["be waitin'"] = "are waiting",
        ["Be waitin'"] = "Are waiting",
        ["be sayin'"] = "are saying",
        ["Be sayin'"] = "Are saying",
        ["be tinkin'"] = "are thinking",
        ["Be tinkin'"] = "Are thinking",
        ["be thinkin'"] = "are thinking",
        ["Be thinkin'"] = "Are thinking",
    }
}
