PaymentType.java

package com.ctrlbuy.webshop.enums;

/**
 * PaymentType enum för olika betalningsmetoder och transaktionstyper
 * ✅ RAILWAY-KOMPATIBEL: Uppdaterad med befintliga typer + nya funktioner
 */
public enum PaymentType {

    // Kort-baserade betalningar
    CREDIT_CARD("Credit Card", "Kreditkort", true),
    DEBIT_CARD("Debit Card", "Bankkort", true),

    // Digital betalningar
    PAYPAL("PayPal", "PayPal", false),
    STRIPE("Stripe", "Stripe", false),
    MOBILE_PAYMENT("Mobile Payment", "Mobilbetalning", false),
    CRYPTOCURRENCY("Cryptocurrency", "Kryptovaluta", false),

    // Traditionella betalningar
    BANK_TRANSFER("Bank Transfer", "Bankgiro", false),
    CASH("Cash", "Kontant", false),

    // Specialbetalningar
    GIFT_CARD("Gift Card", "Presentkort", false),

    // Återbetalningar och justeringar
    REFUND("Refund", "Återbetalning", false);

    private final String displayName;
    private final String swedishName;
    private final boolean requiresCard;

    PaymentType(String displayName, String swedishName, boolean requiresCard) {
        this.displayName = displayName;
        this.swedishName = swedishName;
        this.requiresCard = requiresCard;
    }

    public String getDisplayName() {
        return displayName;
    }

    public String getSwedishName() {
        return swedishName;
    }

    public boolean requiresCard() {
        return requiresCard;
    }

    /**
     * Kontrollera om det är en kortbaserad betalning
     */
    public boolean isCardBased() {
        return this == CREDIT_CARD || this == DEBIT_CARD;
    }

    /**
     * Kontrollera om det är en digital betalning
     */
    public boolean isDigital() {
        return this == PAYPAL || this == STRIPE || this == MOBILE_PAYMENT ||
                this == CRYPTOCURRENCY;
    }

    /**
     * Kontrollera om det är en omedelbar betalning
     */
    public boolean isInstant() {
        return this == CREDIT_CARD || this == DEBIT_CARD ||
                this == PAYPAL || this == STRIPE ||
                this == MOBILE_PAYMENT || this == CASH;
    }

    /**
     * Kontrollera om det kräver verifiering
     */
    public boolean requiresVerification() {
        return this == BANK_TRANSFER || this == CRYPTOCURRENCY;
    }

    /**
     * Kontrollera om det är en återbetalningstyp
     */
    public boolean isRefundType() {
        return this == REFUND;
    }

    /**
     * Kontrollera om betalningstypen stöder återbetalningar
     */
    public boolean supportsRefunds() {
        return this != CASH && this != CRYPTOCURRENCY && this != GIFT_CARD;
    }

    /**
     * Kontrollera om det är en säker betalningsmetod
     */
    public boolean isSecure() {
        return this == CREDIT_CARD || this == DEBIT_CARD ||
                this == PAYPAL || this == STRIPE ||
                this == BANK_TRANSFER;
    }

    /**
     * Hämta processing fee i procent (exempel)
     */
    public double getProcessingFeePercent() {
        switch (this) {
            case CREDIT_CARD:
                return 2.9; // 2.9%
            case DEBIT_CARD:
                return 1.5; // 1.5%
            case PAYPAL:
                return 3.4; // 3.4%
            case STRIPE:
                return 2.9; // 2.9%
            case MOBILE_PAYMENT:
                return 2.0; // 2.0%
            case BANK_TRANSFER:
                return 0.5; // 0.5%
            case CRYPTOCURRENCY:
                return 1.0; // 1.0%
            case CASH:
            case GIFT_CARD:
            case REFUND:
                return 0.0; // Ingen avgift
            default:
                return 0.0;
        }
    }

    /**
     * Hämta maximal transaktionsgräns (exempel i SEK)
     */
    public long getMaxTransactionLimit() {
        switch (this) {
            case CREDIT_CARD:
                return 100000; // 100,000 SEK
            case DEBIT_CARD:
                return 50000;  // 50,000 SEK
            case PAYPAL:
                return 200000; // 200,000 SEK
            case STRIPE:
                return 150000; // 150,000 SEK
            case MOBILE_PAYMENT:
                return 25000;  // 25,000 SEK
            case BANK_TRANSFER:
                return 1000000; // 1,000,000 SEK
            case CRYPTOCURRENCY:
                return 500000;  // 500,000 SEK
            case CASH:
                return 10000;   // 10,000 SEK
            case GIFT_CARD:
                return 5000;    // 5,000 SEK
            case REFUND:
                return Long.MAX_VALUE; // Ingen gräns för återbetalningar
            default:
                return 0;
        }
    }

    /**
     * Kontrollera om betalningstypen är tillgänglig i Sverige
     */
    public boolean isAvailableInSweden() {
        // Alla nuvarande typer är tillgängliga i Sverige
        return true;
    }

    /**
     * Hämta ikon-namn för frontend
     */
    public String getIconName() {
        switch (this) {
            case CREDIT_CARD:
            case DEBIT_CARD:
                return "credit-card";
            case PAYPAL:
                return "paypal";
            case STRIPE:
                return "stripe";
            case BANK_TRANSFER:
                return "bank";
            case CASH:
                return "money-bill";
            case CRYPTOCURRENCY:
                return "bitcoin";
            case MOBILE_PAYMENT:
                return "mobile-alt";
            case GIFT_CARD:
                return "gift";
            case REFUND:
                return "undo";
            default:
                return "credit-card";
        }
    }

    @Override
    public String toString() {
        return swedishName;
    }
}