group BusinessAccount;

CHECK_TENANT() ::= "tenant_record_id = :tenantRecordId"
AND_CHECK_TENANT() ::= "AND <CHECK_TENANT()>"

getAccountsCreatedOverTime() ::= <<
  select
    date(from_unixtime(created_date / 1000)) day
    -- TODO: use account_record_id, once populated
  , count(record_id) count
  from bac
  where <CHECK_TENANT()>
  group by 1
  order by 1
  ;
>>

getAccount(account_id) ::= <<
  select
    account_id
  , account_key
  , created_date
  , updated_date
  , balance
  , name
  , last_invoice_date
  , total_invoice_balance
  , last_payment_status
  , payment_method
  , credit_card_type
  , billing_address_country
  , currency
  , tenant_record_id
  from bac
  where account_id=:account_id
  <AND_CHECK_TENANT()>
  limit 1
  ;
>>

getAccountByKey(account_key) ::= <<
  select
    account_id
  , account_key
  , created_date
  , updated_date
  , balance
  , name
  , last_invoice_date
  , total_invoice_balance
  , last_payment_status
  , payment_method
  , credit_card_type
  , billing_address_country
  , currency
  , tenant_record_id
  from bac
  where account_key=:account_key
  <AND_CHECK_TENANT()>
  limit 1
  ;
>>

createAccount() ::= <<
  insert into bac(
    account_id
  , account_key
  , created_date
  , updated_date
  , balance
  , name
  , last_invoice_date
  , total_invoice_balance
  , last_payment_status
  , payment_method
  , credit_card_type
  , billing_address_country
  , currency
  , account_record_id
  , tenant_record_id
  ) values (
    :account_id
  , :account_key
  , :created_date
  , :updated_date
  , :balance
  , :name
  , :last_invoice_date
  , :total_invoice_balance
  , :last_payment_status
  , :payment_method
  , :credit_card_type
  , :billing_address_country
  , :currency
  , :accountRecordId
  , :tenantRecordId
  );
>>

saveAccount() ::= <<
  update bac set
    updated_date=:updated_date
  , balance=:balance
  , name=:name
  , last_invoice_date=:last_invoice_date
  , total_invoice_balance=:total_invoice_balance
  , last_payment_status=:last_payment_status
  , payment_method=:payment_method
  , credit_card_type=:credit_card_type
  , billing_address_country=:billing_address_country
  , currency=:currency
  where account_id=:account_id
  <AND_CHECK_TENANT()>
  ;
>>

deleteAccount(account_id) ::= <<
delete from bac where account_id = :account_id <AND_CHECK_TENANT()>;
>>

test() ::= <<
select 1 from bac where <CHECK_TENANT()> limit 1;
>>
