<?php

namespace Tests\Feature;

use App\Modules\Company\Account\Setup;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;

use App\Models\Worker;
use App\Models\Company;
use App\Models\CompanySettings;
use App\Models\CompanyUser;
use App\Models\CompanyExpertise;
use App\Models\CompanySubscriptionRates;
use App\Models\CompanySubscriptionCoupons;
use App\Models\CouponSubscsriptionRate;


class SetupCompanyTest extends TestCase
{
    /**
     * A basic feature test example.
     */

    use RefreshDatabase, WithFaker;


    public function test_setup_company_details(): void
    {
        //Create worker,company, and company user
        $worker = Worker::factory()->create();
        $company = Company::factory()->create();
        $companyUser = CompanyUser::factory()->state([
            'worker_id' => $worker->id,
            'company_id' => $company->id,
            'role_id' => 1 
        ])->create();

        $this->assertDatabaseHas('company_users',[
            'worker_id' => $worker->id,
            'company_id' => $company->id,
            'role_id' => 1
        ]);

        //get subscription details
        $getCompanySubcriptionDetails = CompanySubscriptionRates::where('id', 1)->first();

        $this->assertTrue($getCompanySubcriptionDetails==true);

        //create coupon
        $createCoupon = CompanySubscriptionCoupons::factory()->create();

        //assign coupon to subscription
        $createCouponSubscriptionRate = CouponSubscsriptionRate::factory()->state([
            'coupon_id' => $createCoupon->id,
            'company_subscription_rates_id' => $getCompanySubcriptionDetails->id
        ])->create();

        $this->assertDatabaseHas('coupon_subscription_rates',[
            'coupon_id' => $createCoupon->id,
            'company_subscription_rates_id' => $getCompanySubcriptionDetails->id
        ]);

        //Test update company details
        Company::where('id',$company->id)->update([
            'name' => 'Updated Name'
        ]);
        $this->assertDatabaseHas('companies',[
            'name' => 'Updated Name',
        ]);

        //Create company expertise
        CompanyExpertise::factory()->state([
            'company_id' => $company->id
        ])->create();

        $settingsData = [
            'company_id' => $company->id,
            'key'  => 'worker_request_email_notification',
            'value'  => 'enabled',
        ];
        CompanySettings::create($settingsData);
        $this->assertDatabaseHas('company_settings',[
            'company_id' => $company->id,
            'key' => 'worker_request_email_notification',
            'value' => 'enabled',
        ]);
      
        $settingsData = [
            'company_id' => $company->id,
            'key'  => 'subscribed_zipcode',
            'value'  => '80108',
        ];
        CompanySettings::create($settingsData);
        $this->assertDatabaseHas('company_settings',[
            'company_id' => $company->id,
            'key' => 'subscribed_zipcode',
            'value' => '80108',
        ]);
       
        $settingsData = [
            'company_id' => $company->id,
            'key'  => 'subscribed_zipcode_radius',
            'value'  => '2',
        ];
        CompanySettings::create($settingsData);
        $this->assertDatabaseHas('company_settings',[
            'company_id' => $company->id,
            'key' => 'subscribed_zipcode_radius',
            'value' => '2',
        ]);
        
    }
    
}
