<?php
namespace Tests\Unit;

use App\Enums\ArticleStatus;
use App\Enums\BusinessType;
use App\Enums\CampaignStatus;
use App\Enums\InquiryStatus;
use App\Enums\InquiryType;
use App\Enums\OpportunityStatus;
use App\Enums\PartnerLevel;
use App\Enums\StoreStatus;
use App\Enums\StoreType;
use App\Enums\TeamCategory;
use App\Enums\VacancyStatus;
use App\Enums\VacancyType;
use PHPUnit\Framework\TestCase;

class ModelCastTest extends TestCase
{
    public function test_store_type_enum_values(): void
    {
        $this->assertContains('hiper', [StoreType::Hiper->value]);
        $this->assertContains('mix', [StoreType::Mix->value]);
    }

    public function test_store_status_enum_values(): void
    {
        $this->assertContains('open', [StoreStatus::Open->value]);
        $this->assertContains('closed', [StoreStatus::Closed->value]);
        $this->assertContains('renovation', [StoreStatus::Renovation->value]);
    }

    public function test_article_status_enum_values(): void
    {
        $this->assertEquals('draft', ArticleStatus::Draft->value);
        $this->assertEquals('published', ArticleStatus::Published->value);
        $this->assertEquals('archived', ArticleStatus::Archived->value);
    }

    public function test_campaign_status_enum_values(): void
    {
        $this->assertEquals('draft', CampaignStatus::Draft->value);
        $this->assertEquals('published', CampaignStatus::Published->value);
        $this->assertEquals('archived', CampaignStatus::Archived->value);
    }

    public function test_inquiry_status_enum_values(): void
    {
        $this->assertEquals('pending', InquiryStatus::Pending->value);
        $this->assertEquals('new', InquiryStatus::New->value);
        $this->assertEquals('read', InquiryStatus::Read->value);
        $this->assertEquals('in_review', InquiryStatus::InReview->value);
    }

    public function test_opportunity_status_enum(): void
    {
        $this->assertEquals('draft', OpportunityStatus::Draft->value);
        $this->assertEquals('published', OpportunityStatus::Published->value);
        $this->assertEquals('archived', OpportunityStatus::Archived->value);
    }

    public function test_partner_level_enum(): void
    {
        $this->assertEquals('standard', PartnerLevel::Standard->value);
        $this->assertEquals('gold', PartnerLevel::Gold->value);
        $this->assertEquals('platinum', PartnerLevel::Platinum->value);
        $this->assertEquals('premium', PartnerLevel::Premium->value);
    }

    public function test_team_category_enum(): void
    {
        $this->assertEquals('board', TeamCategory::Board->value);
        $this->assertEquals('leadership', TeamCategory::Leadership->value);
    }

    public function test_vacancy_type_enum(): void
    {
        $this->assertEquals('full-time', VacancyType::FullTime->value);
        $this->assertEquals('part-time', VacancyType::PartTime->value);
        $this->assertEquals('internship', VacancyType::Internship->value);
    }

    public function test_vacancy_status_enum(): void
    {
        $this->assertEquals('draft', VacancyStatus::Draft->value);
        $this->assertEquals('published', VacancyStatus::Published->value);
        $this->assertEquals('closed', VacancyStatus::Closed->value);
    }

    public function test_all_enums_have_labels(): void
    {
        $this->assertIsString(StoreType::Hiper->label());
        $this->assertIsString(StoreStatus::Open->label());
        $this->assertIsString(ArticleStatus::Draft->label());
        $this->assertIsString(CampaignStatus::Draft->label());
        $this->assertIsString(InquiryStatus::Pending->label());
        $this->assertIsString(OpportunityStatus::Draft->label());
        $this->assertIsString(PartnerLevel::Standard->label());
        $this->assertIsString(TeamCategory::Board->label());
        $this->assertIsString(VacancyType::FullTime->label());
        $this->assertIsString(VacancyStatus::Draft->label());
        $this->assertIsString(BusinessType::Supermarket->label());
        $this->assertIsString(InquiryType::General->label());
    }
}
