#!/usr/bin/env bash

# Replace these variables with your own values
fb_remote_host="chado.flybase.org"
fb_user="flybase"
fb_database="flybase"
fb_scheme="public"

# Create a directory to store the TSV files
mkdir -p "./data/tsv_exports_new/$fb_scheme/"

(

cd "./data/tsv_exports_new/$fb_scheme/"

# List of table names in the information_schema
is_tables=(
    "tables"
    "columns"
    "table_constraints"
    "key_column_usage"
    "referential_constraints"
    "schemata"
    "views"
    "column_privileges"
    "table_privileges"
    "routines"
    "triggers"
    "domains"
    "domain_constraints"
    "sequences"
    "character_sets"
    "collations"
    "check_constraints"
    "view_column_usage"
    "view_table_usage"
    "view_routine_usage"
    "parameters"
)


# Loop for information_schema tables
for is_table in "${is_tables[@]}"; do
    tablename="information_schema.$is_table"
    echo "Processing $tablename"
    psql -h $fb_remote_host -U $fb_user -d $fb_database -c "\COPY (SELECT * FROM $tablename) TO './${tablename}.tsv' WITH (FORMAT CSV, HEADER, DELIMITER E'\t')"
done


# Retrieve and export individual schema tables
tables=$(psql -h $fb_remote_host -U $fb_user -d $fb_database -t -c "SELECT table_name FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_catalog = '$fb_database' AND table_schema = '$fb_scheme';")

for table in $tables; do
    filepath="./${table}.tsv"
    echo "Exporting table: $fb_scheme.$table"

    if [ ! -f "$filepath" ]; then
        echo "Exporting to $filepath"
        psql -h $fb_remote_host -U $fb_user -d $fb_database -c "\COPY $fb_scheme.$table TO STDOUT WITH (FORMAT CSV, DELIMITER E'\t', HEADER true)" > "$filepath"
    else
        echo "$filepath already exists."
    fi
done

sql_query="
SELECT
    fk.table_name AS foreignkey_table,
    fk.column_name AS foreignkey_column_name,
    pk.table_name AS primarykey_table,
    pk.column_name AS primarykey_column_name
FROM
    information_schema.key_column_usage AS fk
JOIN
    information_schema.referential_constraints AS rc
    ON fk.constraint_catalog = rc.constraint_catalog
    AND fk.constraint_schema = rc.constraint_schema
    AND fk.constraint_name = rc.constraint_name
JOIN
    information_schema.key_column_usage AS pk
    ON rc.unique_constraint_catalog = pk.constraint_catalog
    AND rc.unique_constraint_schema = pk.constraint_schema
    AND rc.unique_constraint_name = pk.constraint_name
    AND fk.ordinal_position = pk.ordinal_position
WHERE
    fk.table_schema = 'public' AND pk.table_schema = 'public'
ORDER BY
    pk.table_name, fk.ordinal_position
"

# Export query result to TSV file
psql -h $fb_remote_host -U $fb_user -d $fb_database -c "\COPY ($sql_query) TO './fk_to_pk_links.tsv' WITH (FORMAT CSV, DELIMITER E'\t')"



output_file="columns.txt"

for table in $tables; do
    columns=$(psql -h $fb_remote_host -U $fb_user -d $fb_database -t -A -c "SELECT string_agg(column_name, ', ' ORDER BY ordinal_position) FROM information_schema.columns WHERE table_schema = '$fb_scheme' AND table_name = '$table';")
    echo "$table: $columns" >> "$output_file"
done

echo "Column names written to $output_file"

)


