package me.pagar.model.filter;

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import me.pagar.format.CommonFormats;
import me.pagar.model.Payable;

public class PayableQueriableFields extends QueriableFieldsAbstract implements QueriableFields {

    private static final String ID = "id";
    private static final String CREATED_AT = "created_at";
    private static final String BANK_ACCOUNT_ID = "bank_account_id";
    private static final String AMOUNT = "amount";
    private static final String RECIPIENT_ID = "recipient_id";
    private static final String STATUS = "status";
    private static final String INSTALLMENT = "installment";
    private static final String TRANSACTION_ID = "transaction_id";
    private static final String SPLIT_RULE_ID = "split_rule_id";
    private static final String PAYMENT_DATE = "payment_date";
    private static final String TYPE = "type";

    public void idEquals(Integer id){
        super.setEquals(ID, id.toString());
    }

    public void bankAccountIdEquals(Integer bankAccountId){
        super.setEquals(BANK_ACCOUNT_ID, bankAccountId.toString());
    }

    public void recipientIdEquals(String recipientId){
        super.setEquals(RECIPIENT_ID, recipientId);
    }

    public void transactionIdEquals(Integer transactionId){
        super.setEquals(TRANSACTION_ID, transactionId.toString());
    }

    public void splitRuleIdEquals(String splitRuleId){
        super.setEquals(SPLIT_RULE_ID, splitRuleId);
    }

    public void installmentsEquals(Integer installments){
        super.setEquals(INSTALLMENT, installments.toString());
    }

    public void statusEquals(Payable.Status status){
        super.setEquals(STATUS, status.name().toLowerCase());
    }

    public void statusNotEquals(Payable.Status status){
        super.setNotEquals(STATUS, status.name().toLowerCase());
    }

    public void typeNotEquals(Payable.Type type){
        super.setNotEquals(TYPE, type.name().toLowerCase());
    }

    public void typeEquals(Payable.Type type){
        super.setEquals(TYPE, type.name().toLowerCase());
    }

    public void amount(Integer amount){
        super.setEquals(AMOUNT, amount.toString());
    }

    public void createdBefore(DateTime date){
        DateTimeFormatter format = DateTimeFormat.forPattern(CommonFormats.DATE_TIME);
        super.setLessThan(CREATED_AT, format.print(date));
    }

    public void createdAfter(DateTime date){
        DateTimeFormatter format = DateTimeFormat.forPattern(CommonFormats.DATE_TIME);
        super.setGreatedThan(CREATED_AT, format.print(date));
    }

    public void paymentBefore(DateTime date){
        DateTimeFormatter format = DateTimeFormat.forPattern(CommonFormats.DATE_TIME);
        super.setLessThan(PAYMENT_DATE, format.print(date));
    }

    public void paymentAfter(DateTime date){
        DateTimeFormatter format = DateTimeFormat.forPattern(CommonFormats.DATE_TIME);
        super.setGreatedThan(PAYMENT_DATE, format.print(date));
    }

    public String pagarmeRelatedModel() {
        return "payables";
    }

}