#!/bin/bash
set -euo pipefail

# 1. Import the data into your development database:
#    make clean download import

# 2. Fill this section out:
test_case_dir=spec/fixtures/referendum_supporters_without_expenditures_are_included

# 3. Set up your test file such that any objects from the
# spreadsheets (candidate, committee, name_to_number,
# etc.) are created in a `before` block before your test is run and not as part
# of this test case.

# 4. Modify the dump commands called at the bottom of the script to dump the
# Netfile data into the fixture.

dump_summary_data() {
  filer_id=$1
  output_directory=$2
  psql disclosure-backend <<QUERY > "${output_directory}/Summary.csv"
  copy (select * from "Summary" where "Filer_ID" = '${filer_id}')
    to stdout with csv header delimiter ',';
QUERY
}

# Dumps independent expenditures reported as supporting or opposing a candidate.
dump_d_expenditures() {
  candidate_name=$1
  output_directory=$2
  psql disclosure-backend <<QUERY > "${output_directory}/D-Expenditure.csv"
  copy (select * from "D-Expenditure" where "Cand_NamL" ilike '%${candidate_name}%')
    to stdout with csv header delimiter ',';
QUERY
}

# Dumps candidate metadata from the google doc spreadsheet.
dump_candidate_metadata() {
  candidate_name=$1
  output_directory=$2

  output_file="${output_directory}/candidates.csv"
  header=$([ -f "${output_file}" ] && true || echo "header")
  sed -n '1p; /'${candidate_name}'/p' downloads/csv/candidates.csv > \
    $output_file
}

# Dumps E-expenditures for a committee
dump_committe_expenditures() {
  filer_id=$1
  output_directory=$2
  psql disclosure-backend <<QUERY > "${output_directory}/D-Expenditure.csv"
  copy (select * from "D-Expenditure" where "Filer_ID" = '${filer_id}')
    to stdout with csv header delimiter ',';
QUERY

  psql disclosure-backend <<QUERY > "${output_directory}/E-Expenditure.csv"
  copy (select * from "E-Expenditure" where "Filer_ID" = '${filer_id}')
    to stdout with csv header delimiter ',';
QUERY

  psql disclosure-backend <<QUERY > "${output_directory}/496.csv"
  copy (select * from "496" where "Filer_ID" = '${filer_id}')
    to stdout with csv header delimiter ',';
QUERY
}

# Dumps reported contributions to a Filer
dump_contributions_for_filer_id() {
  filer_id=$1
  output_directory=$2

  # Export A-Contributions
  output_file="${output_directory}/A-Contributions.csv"
  header=$([ -f "${output_file}" ] && true || echo "header")
  psql disclosure-backend <<QUERY >> "${output_file}"
  copy (select * from "A-Contributions" where "Filer_ID" = '${filer_id}')
    to stdout with csv ${header} delimiter ',';
QUERY

  # Export C-Contributions
  output_file="${output_directory}/C-Contributions.csv"
  header=$([ -f "${output_file}" ] && true || echo "header")
  psql disclosure-backend <<QUERY >> "${output_file}"
  copy (select * from "C-Contributions" where "Filer_ID" = '${filer_id}')
    to stdout with csv ${header} delimiter ',';
QUERY

  # Export 497 Contributions
  output_file="${output_directory}/497.csv"
  header=$([ -f "${output_file}" ] && true || echo "header")
  psql disclosure-backend <<QUERY >> "${output_file}"
  copy (select * from "497" where "Filer_ID" = '${filer_id}' and "Form_Type" = 'F497P1')
    to stdout with csv ${header} delimiter ',';
QUERY
}

init_test_case() {
  dir=$1
  mkdir -p "${dir}"
  rm -f "${dir}"/*
}

# Change this as necessary for the script:
set -x
init_test_case $test_case_dir
dump_summary_data '1410941' $test_case_dir
dump_contributions_for_filer_id '1410941' $test_case_dir
dump_committe_expenditures '1410941' $test_case_dir

# dump_contributions_for_filer_id "1331137" $test_case_dir # Families & Educators
# dump_contributions_for_filer_id "1364564" $test_case_dir # Committee to Protect Oakland Renters - Yes on Measure JJ
