/* global jQuery, mairieAfficheInfoData */
( function ( $ ) {
	'use strict';

	$( function () {
		var $date    = $( '#mai-date' ),
			$heure   = $( '#mai-heure' ),
			$lieu    = $( '#mai-lieu' ),
			$format  = $( '#mai-format' ),
			$apercu  = $( '#mai-apercu' ),
			$dl      = $( '#mai-telecharger' ),
			$btn     = $( '#mai-enregistrer' ),
			$spinner = $( '#mai-spinner' ),
			$msg     = $( '#mai-message' ),
			minuteur;

		if ( ! $date.length || ! $lieu.length ) {
			return;
		}

		function champs() {
			return {
				date: $date.val(),
				heure: $heure.val(),
				lieu: $.trim( $lieu.val() ),
				format: $format.val()
			};
		}

		function parametres( extra ) {
			var p = $.extend(
				{ action: 'mairie_affiche_information_conseil_apercu', nonce: mairieAfficheInfoData.nonceApercu },
				champs()
			);
			return $.extend( p, extra || {} );
		}

		function message( texte, type ) {
			$msg.attr( 'class', 'notice inline notice-' + type )
				.show()
				.find( 'p' ).text( texte );
		}

		function rafraichir() {
			$apercu.attr( 'src', mairieAfficheInfoData.ajaxUrl + '?' + $.param( parametres( { _: Date.now() } ) ) );
			$dl.attr( 'href', mairieAfficheInfoData.ajaxUrl + '?' + $.param( parametres( { dl: 1 } ) ) );
		}

		function differer() {
			clearTimeout( minuteur );
			minuteur = setTimeout( rafraichir, 400 );
		}

		$date.on( 'change', rafraichir );
		$heure.on( 'change', rafraichir );
		$format.on( 'change', rafraichir );
		$lieu.on( 'input', differer );

		$btn.on( 'click', function () {
			$btn.prop( 'disabled', true ).text( mairieAfficheInfoData.msgEnCours );
			$spinner.addClass( 'is-active' );
			$msg.hide();

			$.post( mairieAfficheInfoData.ajaxUrl, $.extend(
				{ action: 'mairie_affiche_information_conseil_enregistrer', nonce: mairieAfficheInfoData.nonceEnreg },
				champs()
			) ).done( function ( reponse ) {
				if ( reponse && reponse.success ) {
					message( reponse.data.message, 'success' );
					$msg.find( 'p' ).append(
						' <a href="' + reponse.data.edit_url + '">' + mairieAfficheInfoData.msgOuvrir + '</a>' +
						' &middot; <a href="' + reponse.data.url + '" target="_blank" rel="noopener">' + mairieAfficheInfoData.msgVoir + '</a>'
					);
				} else {
					message( ( reponse && reponse.data && reponse.data.message ) || mairieAfficheInfoData.msgErreur, 'error' );
				}
			} ).fail( function () {
				message( mairieAfficheInfoData.msgErreur, 'error' );
			} ).always( function () {
				$btn.prop( 'disabled', false ).text( mairieAfficheInfoData.msgEnregistr );
				$spinner.removeClass( 'is-active' );
			} );
		} );

		rafraichir();
	} );
}( jQuery ) );
