<?php

declare(strict_types=1);

namespace App\Enums;

enum WithdrawalType: string
{
    case PROFIT_WITHDRAWAL = 'profit_withdrawal';
    case CAPITAL_RETURN = 'capital_return';
    case DIVIDEND_PAYMENT = 'dividend_payment';

    public function getLabel(): string
    {
        return match ($this) {
            self::PROFIT_WITHDRAWAL => 'Retiro de utilidades',
            self::CAPITAL_RETURN => 'Devolucion de capital',
            self::DIVIDEND_PAYMENT => 'Pago de dividendos',
        };
    }

    public function getColor(): string
    {
        return match ($this) {
            self::PROFIT_WITHDRAWAL => 'warning',
            self::CAPITAL_RETURN => 'danger',
            self::DIVIDEND_PAYMENT => 'purple',
        };
    }

    public function getIcon(): string
    {
        return match ($this) {
            self::PROFIT_WITHDRAWAL => 'heroicon-o-arrow-up-tray',
            self::CAPITAL_RETURN => 'heroicon-o-arrow-uturn-left',
            self::DIVIDEND_PAYMENT => 'heroicon-o-gift',
        };
    }

    public function reducesCapital(): bool
    {
        return match ($this) {
            self::CAPITAL_RETURN => true,
            self::PROFIT_WITHDRAWAL,
            self::DIVIDEND_PAYMENT => false,
        };
    }

    public function affectsProfit(): bool
    {
        return match ($this) {
            self::PROFIT_WITHDRAWAL,
            self::DIVIDEND_PAYMENT => true,
            self::CAPITAL_RETURN => false,
        };
    }

    public function toExpenseCategory(): ExpenseCategory
    {
        return match ($this) {
            self::PROFIT_WITHDRAWAL => ExpenseCategory::PROFIT_WITHDRAWAL,
            self::CAPITAL_RETURN => ExpenseCategory::CAPITAL_RETURN,
            self::DIVIDEND_PAYMENT => ExpenseCategory::DIVIDEND_PAYMENT,
        };
    }
}
