<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        DB::beginTransaction();

        // Admin
        $this->call(AdminsTableSeeder::class);
        $this->call(AdminPermissionsTableSeeder::class);

        // User
        $this->call(UsersTableSeeder::class);
        $this->call(UserPermissionsTableSeeder::class);

        // Soda Vendor Machine
        $this->call(SodaVendorMachine\SodaVendorContractTemplatesTableSeeder::class);
        $this->call(SodaVendorMachine\SodaVendorContractTemplateObligationsTableSeeder::class);
        $this->call(SodaVendorMachine\SodaVendorContractTemplateObligationDependenciesTableSeeder::class);
        $this->call(SodaVendorMachine\SodaVendorEntitiesTableSeeder::class);
        $this->call(SodaVendorMachine\SodaVendorEntitySignaturesTableSeeder::class);
        $this->call(SodaVendorMachine\SodaVendorContractsTableSeeder::class);
        $this->call(SodaVendorMachine\SodaVendorContractEntitiesTableSeeder::class);
        $this->call(SodaVendorMachine\SodaVendorContractObligationsTableSeeder::class);
        $this->call(SodaVendorMachine\SodaVendorContractObligationDependenciesTableSeeder::class);

        // Courier Deliver Service
        $this->call(CourierDeliverService\CourierDeliverServiceContractTemplateTableSeeder::class);
        $this->call(CourierDeliverService\CourierDeliverServiceContractTemplateObligationsTableSeeder::class);
        $this->call(CourierDeliverService\CourierDeliverServiceContractTemplateObligationDependenciesTableSeeder::class);
        $this->call(CourierDeliverService\CourierDeliverServiceEntitiesTableSeeder::class);
        $this->call(CourierDeliverService\CourierDeliverServiceEntitySignaturesTableSeeder::class);
        $this->call(CourierDeliverService\CourierDeliverServicesContractTableSeeder::class);
        $this->call(CourierDeliverService\CourierDeliverServiceContractEntitiesTableSeeder::class);
        $this->call(CourierDeliverService\CourierDeliverServiceContractObligationsTableSeeder::class);
        $this->call(CourierDeliverService\CourierDeliverServiceContractObligationDependenciesTableSeeder::class);

        // Plumber Service
        $this->call(PlumberService\PlumberServiceContractTemplateTableSeeder::class);
        $this->call(PlumberService\PlumberServiceContractTemplateObligationsTableSeeder::class);
        $this->call(PlumberService\PlumberServiceContractTemplateObligationDependenciesTableSeeder::class);
        $this->call(PlumberService\PlumberServiceContractTemplateObligationContractDependenciesTableSeeder::class);
        $this->call(PlumberService\PlumberServiceEntitiesTableSeeder::class);
        $this->call(PlumberService\PlumberServiceEntitySignaturesTableSeeder::class);
        $this->call(PlumberService\PlumberServicesContractTableSeeder::class);
        $this->call(PlumberService\PlumberServiceContractEntitiesTableSeeder::class);
        $this->call(PlumberService\PlumberServiceContractObligationsTableSeeder::class);
        $this->call(PlumberService\PlumberServiceContractObligationDependenciesTableSeeder::class);
        $this->call(PlumberService\PlumberServiceContractObligationContractDependenciesTableSeeder::class);
        
        DB::commit();
    }
}