Simplify a Massive Script with handlers? Need Help Compling

I have the script below that I need to simplify so that when I need to add another source folder I can alter by adding a couple of lines of additional code rather than copy pasting and altering the code.

I’m not sure how to go about it.

The Name of the folder is the Key as this will help identifiy the ‘Brand’ and also the ‘Ratio’ (unique to the brand) and the file containing the keyword

property type_list : {"TIFF", "JPEG", "PNGf", "PICT"}
property extension_list : {"tif", "tiff", "jpg", "jpeg", "png", "pict", "psd"}
property weekNumber : missing value
script o -- ***
          property csvText : {}
end script
tell application "Finder" to set CompletedFolder to folder (((path to pictures folder) as text) & "CompletedFolders")
 
try
          tell application "Finder" to set bh_folders to (get every folder of CompletedFolder whose name starts with "BH")
          if bh_folders is not {} then
                    set aBHFolder to item 1 of bh_folders
                    tell application "Finder"
                              set bh_files to every file of the aBHFolder whose ¬
                                        file type is in the type_list or name extension is in the extension_list
                              set fName to name of aBHFolder -- to get the basename of the CSV file ***
                    end tell
 
                    if bh_files is not {} then -- ***
                              set isChanged to false -- ***
                              set {checkListFile} to my getCSVpath(fName) -- get the CSV path and the week number
                              set existsCSV to checkListFile is not ""
                              if existsCSV then set o's csvText to paragraphs of (read checkListFile as «class utf8») -- get the contents of the CSV file ***
                              launch application "Image Events" -- ***
                              repeat with i from 1 to the count of bh_files
                                        set bh_path to (item i of bh_files) as string
                                        tell application "Image Events"
                                                  set bh_image to open file bh_path
                                                  copy the dimensions of bh_image to {xbhwidth, ybhheight}
  close bh_image
                                        end tell
 
                                        set bhRatio to 1348 / 1832
 
                                        if xbhwidth / ybhheight is greater than bhRatio - 1.0E-3 and xbhwidth / ybhheight is less than bhRatio + 1.0E-3 then
                                                  my BH_CorrectRatio(xbhwidth, ybhheight, bh_path)
                                        else
                                                  my BH_CheckRatio(xbhwidth, ybhheight, bh_path)
                                        end if
 
  -- *** find this name in CSV text ***
                                        if existsCSV and (my findNameInCsv(bh_path)) then set isChanged to true --  a check mark was added in CSV text ***
                              end repeat
                              if existsCSV then
                                        if isChanged then -- CSV file must be updated ***
                                                  set r to my write_to_file(checkListFile, o's csvText) -- *** update CSV file ***
  -- *** if r is true, the checkList is complete so change the folder label to green ***
                                                  if r then tell application "Finder" to set label index of aBHFolder to 6 -- ***
                                        end if
                                        set o's csvText to {} -- empty this property to not save his contents when the script quit ***
                              end if
                    end if
          end if
on error error_message
  display dialog error_message buttons {"OK"} default button 1
  --UPPERCASE CHANGER
 
          set the source_folder to aBHFolder
 
          tell application "Finder"
                    repeat with this_item in entire contents of source_folder
                              set the current_name to the name of this_item as text
                              set the name of this_item to my change_case(the current_name, "upper")
 
                    end repeat
          end tell
 
  --UPPERCASE CHANGER
end try
on BH_CorrectRatio(xbhwidth, ybhheight, bh_path)
 
          tell application "Finder"
                    set label index of document file bh_path to 6
          end tell
end BH_CorrectRatio
 
 
 
on BH_CheckRatio(xbhwidth, ybhheight, bh_path)
 
          tell application "Finder"
                    set label index of document file bh_path to 5
 
          end tell
end BH_CheckRatio
 
---------------Then the next brand and so on......
 
 
------then some handlers
 
on getCSVpath(fName) -- return the path of the CSV file, and the week number
          set {tid, text item delimiters} to {text item delimiters, {"_"}}
          set tName to text 1 thru text item -2 of fName -- remove  the last underscore and characters after it
          set text item delimiters to tid
          try
                    set p to "" -- if not exists then the path will be empty
                    set p to ((path to public folder as string) & "Dropbox:" & "keywords:" & tName & ".csv") as alias
          end try
          return {p, text -2 thru -1 of tName}
end getCSVpath
 
on findNameInCsv(f) -- search the exact name from the beginning of each line ***
          set {tid, text item delimiters} to {text item delimiters, {":"}}
          set tName to last text item of f -- get the filename
          set text item delimiters to "."
          set thisExt to last text item of tName -- get name extension
          set text item delimiters to tid
 
 
 
          if thisExt is in extension_list then
                    set tc to (count thisExt) + 2
                    set last2chars to text -(tc + 1) thru -tc of tName -- get last 2 characters before name extension--> _02
          else -- no extension
                    set last2chars to text -2 thru -1 of tName -- get last 2 characters --> _02
          end if
  --*** true if "_02" .... "_12" ***--
          tell last2chars to set b to it starts with "_" and (text 2 is in "23456789")
          try
                    if b then set tSku to text 1 thru 16 of tName -- the begining 16 digits, I presume the first 16 characters in the nameon error
                    set b to false
 
          end try
 
  (*if thisExt is in extension_list then
                    set tc to (count thisExt) + 2
                    set last3chars to text -(tc + 2) thru -tc of tName -- get last 3 characters before name extension--> _02
          else -- no extension
                    set last3chars to text -3 thru -1 of tName -- get last 3 characters --> _02
          end if
          --*** true if "_02" .... "_12" ***--
          tell last3chars to set b to it starts with "_" and (text 2 is "0" and text 3 is in "23456789" or text 2 thru 3 is in {"10", "11", "12"})
          try
                    if b then set tSku to text 1 thru 16 of tName -- the begining 16 digits, I presume the first 16 characters in the nameon error
                    set b to false
 
          end try*)
 
 
 
          set n to tName & ","
          set tc to count o's csvText
          repeat with i from 1 to tc
                    set t to item i of o's csvText
                    if not b and t starts with n or b and (t starts with tSku or t starts with "✔," & tSku) then -- found
                              set x to ""
                              if not b then set item i of o's csvText to "✔," & t
                              set text item delimiters to {","}
                              try
                                        set x2 to text item 2 of t --get original Name
                                        set x3 to (text item 3 of t) & "ALTERNATIVE CODE :_" --get alternative Sku
                                        set x4 to text item 4 of t -- get the keyword
                                        try
                                                  set x5 to text item 6 of t --get AIR OR SEA RECORD
                                        on error
                                                  set x5 to ""
                                        end try
                              end try
                              set text item delimiters to tid
  -- exiftool add the keywords to EXIF
 
                              if x4 is not "" then do shell script "/usr/bin/exiftool -P -overwrite_original_in_place -keywords+=" & (quoted form of x4) & " -headline=" & (quoted form of x2) & " -source=" & (quoted form of x5) & " " & quoted form of POSIX path of f
 
                              return (not b)
                    end if
          end repeat
          return false
end findNameInCsv
 
on write_to_file(the_file, tList) -- update CSV file ***
          set n to 0
          set n1 to 0
          set tc to count o's csvText
          repeat with i from 1 to tc --- ** move lines with check mark to the bottom **
                    set L to item i of o's csvText
                    if L is not "" then -- not a blank lines
                              set n1 to n1 + 1 -- count this valid line
                              if "✔" is in L then
                                        set n to n + 1 -- count this check mark
                                        set end of o's csvText to L
                                        set item i of o's csvText to missing value
                              end if
                    else
                              set item i of o's csvText to missing value -- remove this blank lines
                    end if
          end repeat
          set {tid, text item delimiters} to {text item delimiters, {return}}
          set the_data to (text of o's csvText) as text -- convert list of lines to text
          set text item delimiters to tid
          try
                    set openfile to open for access the_file with write permission
                    set eof of openfile to 0
  write the_data to openfile starting at 0 as «class utf8»
  close access openfile
          on error
                    try
  close access the_file
                    end try
          end try
          return n1 = n -- if the number of lines equal the numbers of check marks
end write_to_file
 
-- AppleScript 'change_case' handler
 
on change_case(this_text, this_case)
          if this_case is "lower" then
                    set the comparison_string to "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                    set the source_string to "abcdefghijklmnopqrstuvwxyz"
          else
                    set the comparison_string to "abcdefghijklmnopqrstuvwxyz"
                    set the source_string to "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
          end if
          set the new_text to ""
          repeat with thisChar in this_text
                    set x to the offset of thisChar in the comparison_string
                    if x is not 0 then
                              set the new_text to (the new_text & character x of the source_string) as string
                    else
                              set the new_text to (the new_text & thisChar) as string
                    end if
          end repeat
          return the new_text
end change_case
 
--UPPERCASE CHANGER

You just need to replace those values with variables.