#!/usr/bin/env bash

set -e

# location of this script
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"

npx @openapitools/openapi-generator-cli  generate -g typescript-nestjs -i ${script_dir}/../apps/combine-service/src/spec/spec.yml -o ${script_dir}/../libs/combine/api-client/src/lib/  --global-property=skipFormModel=false  --additional-properties=stringEnums=true,nestVersion=7.0.0,supportsES6=true --reserved-words-mappings abstract=abstract

# Import formdata from form-data to allow use on server side
sed -i '13s/^/import  FormData from "form-data"\n/' ${script_dir}/../libs/combine/api-client/src/lib/api/*.service.ts



# Correct a definition in the generated code to play nicer with typescript compiler
sed -i 's/        let formParams: { append(param: string, value: any): void; };/        let formParams: FormData = new FormData(); /g'  ${script_dir}/../libs/combine/api-client/src/lib/api/*.service.ts


# Use the correct headers from the formdata rather than the default headers
sed -i 's/    let headers = this.defaultHeaders;/        let headers:any = this.defaultHeaders;/' ${script_dir}/../libs/combine/api-client/src/lib/api/*.service.ts



perl -0777 -i -p -e 's/if \(useForm\) {\n\s*formParams = new FormData\(\);/ if \(useForm\) {formParams = new FormData\(\); headers= formParams.getHeaders\(\);/g' ${script_dir}/../libs/combine/api-client/src/lib/api/*.service.ts

# Format the files
nx format --projects combine-api-client
#build the library
nx build combine-api-client --skip-cache