#!/bin/bash

set -exu
set -o pipefail

echo "Running openapi-generator..."
OUTPUT=`pwd`/fatcat-openapi
mkdir -p $OUTPUT
cat ../fatcat-openapi3.yml | grep -v "TAGLINE$" | perl -0777 -pe "s/<\!-- STARTLONGDESCRIPTION -->.*<\!-- ENDLONGDESCRIPTION -->//s" > $OUTPUT/api.yaml

export OPENAPI_GENERATOR_VERSION=5.0.0-SNAPSHOT
./openapi-generator-cli.sh \
    generate \
    --generator-name rust-server \
    --input-spec $OUTPUT/api.yaml \
    --output $OUTPUT \
    --package-name=fatcat-openapi \
    --generate-alias-as-model

cd fatcat-openapi

echo "Running cargo-fmt (first time)..."
cargo fmt

echo "Patching..."

# Hack to fix "release_date" (and "withdrawn_date") as Date, not DateTime
sed -i 's/_date: Option<chrono::DateTime<chrono::Utc>>/_date: Option<chrono::NaiveDate>/g' src/models.rs
sed -i 's/_date: Vec<chrono::DateTime<chrono::Utc>>/_date: Vec<chrono::NaiveDate>/g' src/models.rs
perl -0777 -pi -e 's/_date\.push\(\n\s+chrono::DateTime::<chrono::Utc>::from_str/_date\.push\(chrono::NaiveDate::from_str/gs' src/models.rs

# unnecessary duplicate copies of API spec
rm api.yaml
rm -rf api/

echo "Running cargo-fmt (final time)..."
cargo fmt

cp Cargo.toml Cargo.toml.codegen
git checkout Cargo.toml
diff Cargo.toml Cargo.toml.codegen && true
echo "Check the above diff for non-metadata changes to fatcat-openapi/Cargo.toml"