<?php 
 
namespace App\Form; 
 
use App\Entity\Machine; 
use App\Entity\PaperSize; 
use App\Entity\Task; 
use Doctrine\ORM\EntityRepository; 
use Doctrine\ORM\QueryBuilder; 
use phpDocumentor\Reflection\Types\Integer; 
use Symfony\Bridge\Doctrine\Form\Type\EntityType; 
use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\Extension\Core\Type\CollectionType; 
use Symfony\Component\Form\Extension\Core\Type\IntegerType; 
use Symfony\Component\Form\Extension\Core\Type\MoneyType; 
use Symfony\Component\Form\Extension\Core\Type\PercentType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
 
class MachineType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options): void 
    { 
        $builder 
            ->add('name') 
            ->add('code') 
            ->add('parent', EntityType::class,[ 
                'class' => Machine::class, 
                'placeholder' => 'Choose Type', 
                'choice_label' => 'name', 
                'query_builder' => function (EntityRepository  $er): QueryBuilder { 
                    return $er->createQueryBuilder('m') 
                        ->orderBy('m.name', 'ASC'); 
                }, 
                'required' => false 
            ]) 
            ->add('invoiceDescription') 
            ->add('technicalNotes') 
            ->add('setupTime', IntegerType::class, [ 
                'label' => 'Setup Time (min)', 
                'attr' => [ 
                    'class' => 'text-end' 
                ] 
            ]) 
            ->add('rate', MoneyType::class, [ 
                'label' => 'Cost/min', 
                'currency' => 'USD', 
                'attr' => [ 
                    'class' => 'text-end' 
                ] 
            ]) 
            ->add('waste', IntegerType::class, [ 
                'label' => 'Waste (sheets)', 
                'attr' => [ 
                    'class' => 'text-end' 
                ] 
            ]) 
            ->add('spoilage', PercentType::class, [ 
                'scale'=> 2, 
                'attr' => [ 
                    'class' => 'text-end' 
                ] 
            ]) 
            ->add('tasks', EntityType::class, [ 
                'class' => Task::class, 
                'multiple' => true, 
                'expanded' => true, 
                'choice_label' => 'name', 
                'by_reference' => false 
            ] ) 
            ->add('paperSizes', EntityType::class, [ 
                'class' => PaperSize::class, 
                'multiple' => true, 
                'expanded' => true, 
                'choice_label' => 'name', 
                'by_reference' => false 
 
            ])->add('machineTimeMatrices', CollectionType::class,[ 
                'entry_type' => MachineTimeMatrixType::class, 
                'entry_options' => [ 
                    'label' => false 
                ], 
                'allow_add' => true, 
                'allow_delete' => true, 
                'by_reference' => false, 
                'prototype' => true, 
                'label' => false 
            ])->add('machineCostMatrices', CollectionType::class,[ 
                'entry_type' => MachineCostMatrixType::class, 
                'entry_options' => [ 
                    'label' => false 
                ], 
                'allow_add' => true, 
                'allow_delete' => true, 
                'by_reference' => false, 
                'prototype' => true, 
                'label' => false 
            ]); 
 
    } 
 
    public function configureOptions(OptionsResolver $resolver): void 
    { 
        $resolver->setDefaults([ 
            'data_class' => Machine::class, 
        ]); 
    } 
}