<?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 Servive
        $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);
        
        // Repair Servive
        $this->call(RepairService\RepairServiceContractTemplatesTableSeeder::class);
        $this->call(RepairService\RepairServiceContractTemplateObligationsTableSeeder::class);
        $this->call(RepairService\RepairServiceContractTemplateObligationDependenciesTableSeeder::class);
        $this->call(RepairService\RepairServiceEntitiesTableSeeder::class);
        $this->call(RepairService\RepairServiceSingaturesTableSeeder::class);
        $this->call(RepairService\RepairServiceContractsTableSeeder::class);
        $this->call(RepairService\RepairServiceContractEntitiesTableSeeder::class);
        $this->call(RepairService\RepairServiceContractObligationsTableSeeder::class);
        $this->call(RepairService\RepairServiceContractObligationDependenciesTableSeeder::class);
        
        $this->call(RenderService\RenderServiceContractTemplatesTableSeeder::class);
        $this->call(RenderService\RenderServiceContractTemplateObligationsTableSeeder::class);
        $this->call(RenderService\RenderServiceContractTemplateObligationDependenciesTableSeeder::class);
        $this->call(RenderService\RenderServiceEntitiesTableSeeder::class);
        $this->call(RenderService\RenderServiceSingaturesTableSeeder::class);
        $this->call(RenderService\RenderServiceContractsTableSeeder::class);
        $this->call(RenderService\RenderServiceContractEntitiesTableSeeder::class);
        $this->call(RenderService\RenderServiceContractObligationsTableSeeder::class);
        $this->call(RenderService\RenderServiceContractObligationDependenciesTableSeeder::class);

        DB::commit();
    }
}
