<?php

// DataTables PHP library
include( "../lib/DataTables.php" );

// Alias Editor classes so they are easy to use
use
	DataTables\Editor,
	DataTables\Editor\Field,
	DataTables\Editor\Format,
	DataTables\Editor\Mjoin,
	DataTables\Editor\Options,
	DataTables\Editor\Upload,
	DataTables\Editor\Validate,
	DataTables\Editor\ValidateOptions;


$usid = $_POST['usid'];

Editor::inst( $db, 'example' )
	->field(
		Field::inst( 'example.serial' ),
		Field::inst( 'example.producer' ),
		Field::inst( 'example.name' ),
		Field::inst( 'example.country' )
            ->options( Options::inst()
                ->table( 'countries' )
                ->value( 'id' )
                ->label( 'countryName_it' )
            )
			->validator( Validate::dbValues(
				ValidateOptions::inst()
					->message( 'Paese non a DB' ),
				'countryName_it',
				'countries'
			) ),
		Field::inst( 'countries.countryName_it' ),
		Field::inst( 'example.yearOfProduction' )
			->validator( Validate::numeric('.', ValidateOptions::inst() ->message('Inserire soltanto valori numerici')))
			->validator( Validate::minLen( 4, ValidateOptions::inst() ->message('Input non valido') ) )
			->validator( Validate::maxLen( 4, ValidateOptions::inst() ->message('Input non valido') ) )
			->setFormatter( Format::ifEmpty(null) ),
		Field::inst( 'example.instcat_id' )
            ->options( Options::inst()
                ->table( 'instcat' )
                ->value( 'id' )
                ->label( 'category' )
            ),
		Field::inst( 'instcat.category' ),
		Field::inst( 'example.purchaseDate' )
            ->validator( Validate::dateFormat('d/m/Y') )
            ->getFormatter( Format::dateSqlToFormat('d/m/Y') )
            ->setFormatter( Format::dateFormatToSql('d/m/Y') ),
		Field::inst( 'example.color' ),
		Field::inst( 'example.owner_id' )
            ->options( Options::inst()
                ->table( 'users' )
                ->value( 'id' )
				->label( 'name' )
            ),
		Field::inst( 'users.name' ),
		Field::inst( 'users.surname' ),
		Field::inst( 'example.public_id' ),
		Field::inst( 'example.pending' ),
		Field::inst( 'example.pendingTo' )
	)
	->where( function ( $q ) use ( $usid ) {
		$q->where( function ( $r ) use ( $usid ) {
			$r->where( 'owner_id', $usid );
			$r->or_where( function ( $s ) use ( $usid ) {	
				$s->where( 'pending', '1' );
				$s->and_where( 'pendingTo', $usid );
				} );
			} );
		} )
	->leftJoin( 'countries', 'countries.countryName_it', '=', 'example.country' )
	->leftJoin( 'instcat', 'instcat.id', '=', 'example.instcat_id' )
	->leftJoin( 'users', 'users.id', '=', 'example.owner_id' )
	->process($_POST)
	->json();
