1*082815dcSEvan Baconimport { getResourceXMLPathAsync } from './Paths';
2*082815dcSEvan Baconimport { ResourceItemXML, ResourceKind, ResourceXML } from './Resources';
3*082815dcSEvan Bacon
4*082815dcSEvan Baconexport async function getProjectStringsXMLPathAsync(
5*082815dcSEvan Bacon  projectRoot: string,
6*082815dcSEvan Bacon  { kind }: { kind?: ResourceKind } = {}
7*082815dcSEvan Bacon): Promise<string> {
8*082815dcSEvan Bacon  return getResourceXMLPathAsync(projectRoot, { kind, name: 'strings' });
9*082815dcSEvan Bacon}
10*082815dcSEvan Bacon
11*082815dcSEvan Baconexport function setStringItem(
12*082815dcSEvan Bacon  itemToAdd: ResourceItemXML[],
13*082815dcSEvan Bacon  stringFileContentsJSON: ResourceXML
14*082815dcSEvan Bacon): ResourceXML {
15*082815dcSEvan Bacon  if (!stringFileContentsJSON?.resources?.string) {
16*082815dcSEvan Bacon    if (!stringFileContentsJSON.resources || typeof stringFileContentsJSON.resources === 'string') {
17*082815dcSEvan Bacon      // file was empty and JSON is `{resources : ''}`
18*082815dcSEvan Bacon      stringFileContentsJSON.resources = {};
19*082815dcSEvan Bacon    }
20*082815dcSEvan Bacon    stringFileContentsJSON.resources.string = itemToAdd;
21*082815dcSEvan Bacon    return stringFileContentsJSON;
22*082815dcSEvan Bacon  }
23*082815dcSEvan Bacon
24*082815dcSEvan Bacon  for (const newItem of itemToAdd) {
25*082815dcSEvan Bacon    const stringNameExists = stringFileContentsJSON.resources.string.findIndex(
26*082815dcSEvan Bacon      (e: ResourceItemXML) => e.$.name === newItem.$.name
27*082815dcSEvan Bacon    );
28*082815dcSEvan Bacon    if (stringNameExists > -1) {
29*082815dcSEvan Bacon      // replace the previous item
30*082815dcSEvan Bacon      stringFileContentsJSON.resources.string[stringNameExists] = newItem;
31*082815dcSEvan Bacon    } else {
32*082815dcSEvan Bacon      stringFileContentsJSON.resources.string =
33*082815dcSEvan Bacon        stringFileContentsJSON.resources.string.concat(newItem);
34*082815dcSEvan Bacon    }
35*082815dcSEvan Bacon  }
36*082815dcSEvan Bacon  return stringFileContentsJSON;
37*082815dcSEvan Bacon}
38*082815dcSEvan Bacon
39*082815dcSEvan Baconexport function removeStringItem(named: string, stringFileContentsJSON: ResourceXML): ResourceXML {
40*082815dcSEvan Bacon  if (stringFileContentsJSON?.resources?.string) {
41*082815dcSEvan Bacon    const stringNameExists = stringFileContentsJSON.resources.string.findIndex(
42*082815dcSEvan Bacon      (e: ResourceItemXML) => e.$.name === named
43*082815dcSEvan Bacon    );
44*082815dcSEvan Bacon    if (stringNameExists > -1) {
45*082815dcSEvan Bacon      // replace the previous value
46*082815dcSEvan Bacon      stringFileContentsJSON.resources.string.splice(stringNameExists, 1);
47*082815dcSEvan Bacon    }
48*082815dcSEvan Bacon  }
49*082815dcSEvan Bacon  return stringFileContentsJSON;
50*082815dcSEvan Bacon}
51