<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Models\Role;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
use App\Modules\Jobseeker\Register;
use App\Modules\RemoteStorage\GoogleBucketGateway;
use App\Traits\GoogleBucket;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
use Carbon\Carbon;

class RegisterJobseekerTest extends TestCase
{
    use WithFaker;
    use RefreshDatabase;

    public function test_register_jobseeker(): void
    {
        $googleBucket = new GoogleBucketGateway;
        $token = Str::random(60);

        $register = new Register($googleBucket);
        $data = array(
            'email_address' => $this->faker->email,
            'password' => Hash::make('123456789'),
            'first_name' => ucfirst(strtolower($this->faker->firstName)),
            'last_name' => ucfirst(strtolower($this->faker->lastName)),
            'availability_start_date' => now(),
            'email_verification_code' => $token,
        );

        $jobseeker= $register->create_jobseeker($data);
        $this->assertTrue($jobseeker==true, 'Created Jobseeker Details');

        $freeDays = $register->getFreeDays();
        $this->assertTrue($freeDays==true, 'Get Free Days Details');

        if ($freeDays > 0) {
            $subscription_data = array(
                'worker_id' => $jobseeker->id,
                'rate_id' => 0,
                'duration' => Carbon::now()->addDay($freeDays),
                'status' => 'trial',
            );
            $jobseeker_subscription = $register->create_jobseeker_subscription($subscription_data);

        } else {
            $jobseeker_subscription = true;
        }
        $this->assertTrue($jobseeker_subscription==true, 'Created Jobseeker Subscription Details');

        $role = Role::select('id')->where('name', 'Job Seeker')->first()->id;
        $company_user = array(
            'worker_id' => $jobseeker->id,
            'role_id' => $role,
        );
        $jobseeker_companyUser = $register->create_company_user($company_user);

        $this->assertTrue($jobseeker_companyUser==true, 'Created Jobseeker Company User Details');
        
    }
}
