$(function() {
	checkBType();

	$('#main_value, #advance_value, #value_to_pay, #paid_out_value, #residual_value').mask('000.000.000.000.000,00', {reverse: true});
	$('#dateInit, #dateEnd, #document_date, #expirate_date, #payment_date, #confirm_payment_date, #new_expirate_date').mask('00/00/0000');

	// Limpar filtro
	$('form#form_filter button#clear_all').on('click', function(e) {
		e.preventDefault();

		$('input[name="filter[clear]"]').val('clear');
		$('form#form_filter').submit();
	});

	// Limpar campo de texto ao mudar tipo de busca
	$('#searchBy').change(function() {
		$('#searchText').val('');
	});

	// Show and Hide Filters
	$(document).ready(function() {
		$('select#option_filter').change();
	});

	$('select#option_filter').on('change', function() {
		var opt = $(this).val();
		$('.bills_type, .form_p, .situation_b').css('display', 'none');

		switch(opt) {

			case '1':
				$('#p_form').hide(100);
				$('#b_situation').hide(100);
				$('#b_type').show(200);
			break;

			case '2':
				$('#b_type').hide(100);
				$('#b_situation').hide(100);
				$('#p_form').show(200);
			break;

			case '3':
				$('#p_form').hide(100);
				$('#b_type').hide(100);
				$('#b_situation').show(200);
			break;

			default:
				$('#b_situation').hide(100);
				$('#p_form').hide(100);
				$('#b_type').hide(100);
			break;
		}
	});

	//Tipo de conta Mostrar ou ocultar
	$('#b_type').on('click', function() {

		if($('.bills_type').css('display') != 'flex') {
			$('.bills_type').css('display', 'flex');
		} else {
			$('.bills_type').css('display', 'none');
		}
	});

	// Evento ao clicar em um item de tipo de conta a pagar
	$('.bills_type input').on('click', function() {
		checkBType();
	});

	function checkBType() {
		var checados = [];
		$.each($("input[name='filter[b_type][]']:checked"), function(){
			checados.push($(this).attr('id'));
		});

		$('#type_b').val(checados);
	}

	// Forma de Pagamento
	$('#p_form').on('click', function() {

		if($('.form_p').css('display') != 'flex') {
			$('.form_p').css('display', 'flex');
		} else {
			$('.form_p').css('display', 'none');
		}
	});

	// Evento ao clicar em um item de forma de pagamento
	$('.form_p input').on('click', function() {
		checkFormPay();
	});

	function checkFormPay() {
		var checados = [];
		$.each($("input[name='filter[p_form][]']:checked"), function(){
			checados.push($(this).attr('id'));
		});

		$('#form_p').val(checados);
	}

	// Situação da conta
	$('#b_situation').on('click', function() {

		if($('.situation_b').css('display') != 'flex') {
			$('.situation_b').css('display', 'flex');
		} else {
			$('.situation_b').css('display', 'none');
		}
	});

	$('.situation_b input').on('click', function() {
		checkBSituation();
	});

	function checkBSituation() {
		var checados = [];
		$.each($("input[name='filter[b_situation][]']:checked"), function(){
			checados.push($(this).attr('id'));
		});

		$('#situation_b').val(checados);
	}
	// Fim Situação da conta


	// validação ao digitar descrição da conta manualmente
	$('#input_provider_description').on('blur', function() {
		if($(this).val().length > 2) {
			setBoxReady('input_provider_description');
		} else {
			setBoxNoReady('input_provider_description');
		}
	});

	// validação ao digitar descrição de contas a pagar manualmente
	$('#billstopay_description').on('keyup', function() {
		if($(this).val().length > 2) {
			setBoxReady('billstopay_description');
		} else {
			setBoxNoReady('billstopay_description');
		}
	});

	// validação ao digitar descrição de forma de pagamento manualmente
	$('#form_to_pay_description').on('keyup', function() {
		if($(this).val().length > 2) {
			setBoxReady('form_to_pay_description');
		} else {
			setBoxNoReady('form_to_pay_description');
		}
	});

	// Click em Fornecedor, adição de conta
	$('#providersList').on('change', function() {
		if($(this).val() != 0) {
			setBoxReady('input_provider_description');
			$('#input_provider_description').val($('#providersList option:selected').html());
		} else {
			setBoxNoReady('input_provider_description');
			$('#input_provider_description').val('');
		}
	});

	// Click em Tipo Conta a Pagar, adição de conta
	$('#billstopayType').on('change', function() {

		if($(this).val() != 0) {
			setBoxReady('billstopay_description');
			$('#billstopay_description').val($('#billstopayType option:selected').html());
		} else {
			setBoxNoReady('billstopay_description');
			$('#billstopay_description').val('');
		}

	});

	// Liberar list de quantidade de repetição da conta
	$('#billstopay_repeat').on('click', function() {
		if($('#billstopay_repeat').is(':checked')) {
			$('select[name="qtd_repeat"]').attr('disabled', false);
		} else {
			$('select[name="qtd_repeat"]').attr('disabled', true);
			$('select[name="qtd_repeat"]').val(0);
		}
	});

	// Click em Forma de Pagamento, adição de conta
	$('#form_to_pay').on('change', function() {
		if($(this).val() != 0) {
			setBoxReady('form_to_pay_description');
			$('#form_to_pay_description').val($('#form_to_pay option:selected').html());
		} else {
			setBoxNoReady('form_to_pay_description');
			$('#form_to_pay_description').val('');
		}

	});

	// Verificação nas datas do formulário
	$('#document_date, #expirate_date, #payment_date, #confirm_payment_date, #new_expirate_date').on('keyup', function() {
		var ref = $(this).attr('id');

		if($(this).val().length == 10) {			
			var date = $(this).val();

			billstopay.verifyDate(date, ref);
		} else {
			$('#'+ref).attr('data-status', false);
		}

	});

	// Janela de confirmação de data de pagamento
	$('#payment_date').on('blur', function() {

		if($(this).attr('data-status') == 'true') {
			$('#confirm_payment_date').val($(this).val());
			$('.modal-stock h4.qtd_days').html("Confirma data de Pagamento?");
			$('.modal-stock').show(200);			
		}

	});

	$('#cancel_date').on('click', function(e) {
		e.preventDefault();
		$('.modal-stock').hide(200);
		$('#confirm_payment_date').val('');
	});

	$('#confirm_date').on('click', function(e) {
		e.preventDefault();
		$('.modal-stock').hide(200);
	});
	// Fim Janela de confirmação de data de pagamento

	// Valor a Pagar
	$('#main_value').on('keyup', function() {
		if($(this).val() != '') {
			var main_value = $('#main_value').val();
			var advance = $('#advance_value').val();

			billstopay.getValueToPay(main_value, advance);
		}
	});

	// Valor Residual
	$('#paid_out_value').on('keyup', function() {

		if($(this).val() != '') {
			var value_to_pay = $('#value_to_pay').val();
			var paid_out_value = $('#paid_out_value').val();

			billstopay.getValueToPay(value_to_pay, paid_out_value, true);
		}
	});

	// Validação antes do envio do formulário
	$('#form_validator button[type="submit"]').click(function(e) {
		e.preventDefault();

		if($('#input_provider_description').attr('data-status') == 'true') {
			
			if($('#billstopay_description').attr('data-status') == 'true') {

				if($('#form_to_pay_description').attr('data-status') == 'true') {

					if($('#expirate_date').attr('data-status') == 'true') {

						if($('#payment_date').val() != '') {
							if($('#payment_date').attr('data-status') == 'true') {

								validationInValues();

							} else {
								utils.showAlerts('.message-add', "Informe a Data de Pagamento Válida!");	
							}
						} else {

							validationInValues();
						}
						
					} else {
						utils.showAlerts('.message-add', "Informe a Data de Vencimento Válida!");
					}
					
				} else {
					utils.showAlerts('.message-add', "Informe a Descrição da Forma de Pgto!");
				}

			} else {
				utils.showAlerts('.message-add', "Informe a Descrição do Contas a Pagar!");
			}

		} else {
			utils.showAlerts('.message-add', "Informe a Descrição do Fornecedor!");
		}
	});

	function validationInValues() {
		var main_value = $('#main_value').val();

		if(parseFloat(main_value) > 0) {

			if($('select[name="situation"]').val() != 0) {

				if(parseFloat($('#residual_value').val()) > 0 && parseInt($('input[name="cloned"]').val()) != 1) {

					$('.modal-confirme-cancel').show(200);

				} else {
					form.submit();
				}
				
			} else {
				utils.showAlerts('.message-add', "Informe a Situação da Conta!");	
			}

		} else {
			utils.showAlerts('.message-add', "Informe o Valor Principal!");	
		}
	}
	// Fim Validação antes do envio do formulário

	// Confirm Generate new Acounts with residual value
	$('#confirm_generate').on('click', function(e) {
		e.preventDefault();
		$('input[name="copied"]').val(1);
		$('.modal-confirme-cancel').hide(100);
		$('.modal-new-expirate').show(500);
	});

	// Não gerar conta com valor residual
	$('#cancel_generate').on('click', function(e) {
		e.preventDefault();
		$('input[name="copied"]').val(0);
		$('.modal-confirme-cancel').hide(200);
		form.submit();
	});


	// Confirmar modal de nova data para conta com residual value
	$('#confirm_expirate').on('click', function(e) {
		e.preventDefault();

		if($('#new_expirate_date').attr('data-status') == 'true') {
			$('input[name="date_new_acount"]').val($('input[name="new_expirate_date"]').val());
			$('.modal-new-expirate').hide(200);
			form.submit();
		} else {
			utils.showAlerts('.message-add', "Data inválida!");
		}
	});

	// Fechar modal de nova data para conta com residual value
	$('#cancel_expirate').on('click', function(e) {
		e.preventDefault();
		$('.modal-new-expirate').hide(200);
	});

	// Funções para alteração de status dos campos dos formulários

	function setBoxReady(id) {
		$('#'+id).attr('data-status', true);
	}

	function setBoxNoReady(id) {
		$('#'+id).attr('data-status', false);
	}

	// Ações em página de edição
	$(document).ready(function() {
		let copied = $('input[name="cloned"]').val();

		if(copied == 1) {
			$('input, textarea').attr('readonly', true);
			$('input, select').attr('disabled', true);

			$('button[type="submit"]').hide();
		}
	});

	// Deletar arquivo anexado
	$('a#delete_attachment').on('click', function() {
		let ref = $(this).attr('data-ref');

		if(ref) {
			billstopay.deleteAtt(ref);
		}
	});

	// Ativar e Inativar Contas
	$('table a#activate, table a#inativate').on('click', function() {
		let action = $(this).attr('id');
		let ref = $(this).attr('data-id');

		if(action == 'inativate') {
			var value = 2;
		} else if(action == 'activate') {
			var value = 1;
		}

		if(value != '') {
			billstopay.updateStatus(ref, value);
		}
	});

	// Selecionar todas as checkbox de contas a pagar
	$('#select_all').on('click', function() {
		var checados = [];

		if($('#select_all').is(':checked')) {
			$.each($('table tr td.select_checkbox input[type="checkbox"]'), function() {
				checados.push($(this).attr('data-val'));

				$(this).prop('checked', true);
			});

			$('input[name="accounts_selected"]').val(checados);

		} else {
			$.each($('table tr td.select_checkbox input[type="checkbox"]'), function() {

				$(this).prop('checked', false);
			});

			$('input[name="accounts_selected"]').val('');
		}

		verifyShowButtonPayment();

	});

	// Seleção única
	$('table tr td.select_checkbox input[type="checkbox"]').on('click', function() {
		var checados = [];
		$('input[name="accounts_selected"]').val('');

		$.each($('table tr td.select_checkbox input[type="checkbox"]:checked'), function() {
			checados.push($(this).attr('data-val'));
		});

		$('input[name="accounts_selected"]').val(checados);
		verifyShowButtonPayment();
	});

	function verifyShowButtonPayment() {
		var accountsList = $('input[name="accounts_selected"]').val();

		if(accountsList != '') {
			$('.btn-pay-accounts').show();

			billstopay.getTotalValueSelected(accountsList);

		} else {
			$('.btn-pay-accounts').hide();
			$('input[name="total_selected"]').val('0,00');
		}
	}

	$('.btn-pay-accounts').on('click', function() {
		$('.modal-set-accounts-pay').show(100);
	});

	$('#close_account_payment').on('click', function() {
		$('.modal-set-accounts-pay').hide(100);
	});

	// Validar data de pagamento
    $('input[name="payment_date"]').on('keyup', function() {
    	let date = $(this).val();

    	if(date.length == 10) {
    		billstopay.verifyDate('payment_date', date);
    	} else {
    		$('input[name="payment_date"]').attr('data-status', false);
    	}
    });


    // Verificação antes de finalizar o pagamento das contas
    $('.modal-set-accounts-pay #confirm_payment').on('click', function() {
    	var payment_form = parseInt($('select[name="payment_form"]').val());

    	if(payment_form) {
    		if($('#payment_date').attr('data-status') == 'true') {
    			let payment_date = $('#payment_date').val();
    			let note_number = $('#note_number').val();
    			let accountsList = $('input[name="accounts_selected"]').val();

    			billstopay.paymentAccounts(accountsList, payment_form, payment_date, note_number);

    		} else {
    			utils.showAlerts('.message-add', 'Digite uma data de pagamento correta!');
    		}

    	} else {
    		utils.showAlerts('.message-add', 'Selecione a forma de Pagamento!');
    	}
    });
});