
import os
import sys
import subprocess
import django
import io
from django.contrib.auth import get_user_model
from django.contrib.auth.hashers import make_password
from decimal import Decimal
def setup_loan_products():
    """Setup default loan products (Boost, Mwamba, Imara)"""
    print("\n💰 Setting up loan products...")
    
    try:
        # Setup Django
        os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'branch_system.settings_production')
        django.setup()
        
        from loans.models import LoanProduct
        from utils.models import SystemSetting
        
        # Check existing loan products - don't delete, just update if needed
        existing_products = LoanProduct.objects.filter(
            product_type__in=['boost', 'mwamba', 'imara']
        )
        
        if existing_products.exists():
            print(f"Found {existing_products.count()} existing loan products, updating...")
            # Update existing products instead of deleting
            for product in existing_products:
                if product.product_type == 'boost':
                    product.name = 'Boost'
                    product.description = 'Quick 1-month loan with flexible repayment options. Perfect for short-term financial needs.'
                    product.min_amount = 1000
                    product.max_amount = 50000
                    product.interest_rate = 20.0
                    product.processing_fee = 5.0
                    product.duration_months = 1
                    product.min_duration = 30
                    product.max_duration = 30
                    product.available_repayment_methods = ['daily', 'weekly', 'monthly']
                    product.save()
                elif product.product_type == 'mwamba':
                    product.name = 'Mwamba'
                    product.description = '3-month loan with weekly or monthly repayment options. Ideal for medium-term financing.'
                    product.min_amount = 5000
                    product.max_amount = 200000
                    product.interest_rate = 20.0
                    product.processing_fee = 5.0
                    product.duration_months = 3
                    product.min_duration = 90
                    product.max_duration = 90
                    product.available_repayment_methods = ['weekly', 'monthly']
                    product.save()
                elif product.product_type == 'imara':
                    product.name = 'Imara'
                    product.description = '6-month loan with monthly repayment. Perfect for long-term financial planning.'
                    product.min_amount = 10000
                    product.max_amount = 500000
                    product.interest_rate = 10.0
                    product.processing_fee = 5.0
                    product.duration_months = 6
                    product.min_duration = 180
                    product.max_duration = 180
                    product.available_repayment_methods = ['monthly']
                    product.save()
        else:
            # Create new products only if they don't exist
            print("Creating new loan products...")
            
            # Create Boost product (1 month, 20% per month, 5% processing fee)
            boost_product = LoanProduct.objects.create(
                name='Boost',
                product_type='boost',
                description='Quick 1-month loan with flexible repayment options. Perfect for short-term financial needs.',
                min_amount=1000,
                max_amount=50000,
                interest_rate=20.0,  # 20% per month
                processing_fee=5.0,  # 5% processing fee
                late_payment_penalty=5.0,
                duration_months=1,
                min_duration=30,
                max_duration=30,
                available_repayment_methods=['daily', 'weekly', 'monthly'],
                requires_guarantor=False,
                requires_collateral=False,
                is_active=True,
                rollover_fee_percentage=10.0,  # 10% rollover fee
                max_rollover_count=3,  # Maximum 3 rollovers allowed
                max_rollover_days=30  # Maximum 30 days per rollover
            )
            
            # Create Mwamba product (3 months, 20% per month, 5% processing fee)
            mwamba_product = LoanProduct.objects.create(
                name='Mwamba',
                product_type='mwamba',
                description='3-month loan with weekly or monthly repayment options. Ideal for medium-term financing.',
                min_amount=5000,
                max_amount=200000,
                interest_rate=20.0,  # 20% per month
                processing_fee=5.0,  # 5% processing fee
                late_payment_penalty=5.0,
                duration_months=3,
                min_duration=90,
                max_duration=90,
                available_repayment_methods=['weekly', 'monthly'],
                requires_guarantor=False,
                requires_collateral=False,
                is_active=True,
                rollover_fee_percentage=10.0,  # 10% rollover fee
                max_rollover_count=2,  # Maximum 2 rollovers allowed
                max_rollover_days=90  # Maximum 90 days per rollover
            )
            
            # Create Imara product (6 months, 10% per month, 5% processing fee)
            imara_product = LoanProduct.objects.create(
                name='Imara',
                product_type='imara',
                description='6-month loan with monthly repayment. Perfect for long-term financial planning.',
                min_amount=10000,
                max_amount=500000,
                interest_rate=10.0,  # 10% per month
                processing_fee=5.0,  # 5% processing fee
                late_payment_penalty=5.0,
                duration_months=6,
                min_duration=180,
                max_duration=180,
                available_repayment_methods=['monthly'],
                requires_guarantor=False,
                requires_collateral=False,
                is_active=True,
                rollover_fee_percentage=10.0,  # 10% rollover fee
                max_rollover_count=1,  # Maximum 1 rollover allowed
                max_rollover_days=180  # Maximum 180 days per rollover
            )
        
        # Set up system settings for loan products (update existing or create new)
        settings_data = [
            # Boost Product Settings
            ('boost_duration_months', '1', 'loan', 'Boost loan duration in months'),
            ('boost_interest_rate', '20.0', 'loan', 'Boost monthly interest rate (%)'),
            ('boost_processing_fee', '5.0', 'loan', 'Boost processing fee (%)'),
            ('boost_repayment_methods', '["daily", "weekly", "monthly"]', 'loan', 'Boost available repayment methods'),
            ('boost_min_amount', '1000', 'loan', 'Boost minimum loan amount'),
            ('boost_max_amount', '50000', 'loan', 'Boost maximum loan amount'),
            ('boost_rollover_fee', '10.0', 'loan', 'Boost rollover fee percentage'),
            ('boost_max_rollovers', '3', 'loan', 'Maximum number of rollovers for Boost'),
            ('boost_rollover_days', '30', 'loan', 'Maximum rollover days for Boost'),
            
            # Mwamba Product Settings
            ('mwamba_duration_months', '3', 'loan', 'Mwamba loan duration in months'),
            ('mwamba_interest_rate', '20.0', 'loan', 'Mwamba monthly interest rate (%)'),
            ('mwamba_processing_fee', '5.0', 'loan', 'Mwamba processing fee (%)'),
            ('mwamba_repayment_methods', '["weekly", "monthly"]', 'loan', 'Mwamba available repayment methods'),
            ('mwamba_min_amount', '5000', 'loan', 'Mwamba minimum loan amount'),
            ('mwamba_max_amount', '200000', 'loan', 'Mwamba maximum loan amount'),
            ('mwamba_rollover_fee', '10.0', 'loan', 'Mwamba rollover fee percentage'),
            ('mwamba_max_rollovers', '2', 'loan', 'Maximum number of rollovers for Mwamba'),
            ('mwamba_rollover_days', '90', 'loan', 'Maximum rollover days for Mwamba'),
            
            # Imara Product Settings
            ('imara_duration_months', '6', 'loan', 'Imara loan duration in months'),
            ('imara_interest_rate', '10.0', 'loan', 'Imara monthly interest rate (%)'),
            ('imara_processing_fee', '5.0', 'loan', 'Imara processing fee (%)'),
            ('imara_repayment_methods', '["monthly"]', 'loan', 'Imara available repayment methods'),
            ('imara_min_amount', '10000', 'loan', 'Imara minimum loan amount'),
            ('imara_max_amount', '500000', 'loan', 'Imara maximum loan amount'),
            ('imara_rollover_fee', '10.0', 'loan', 'Imara rollover fee percentage'),
            ('imara_max_rollovers', '1', 'loan', 'Maximum number of rollovers for Imara'),
            ('imara_rollover_days', '180', 'loan', 'Maximum rollover days for Imara'),
        ]
        
        for key, value, category, description in settings_data:
            SystemSetting.objects.update_or_create(
                key=key,
                defaults={
                    'value': value,
                    'category': category,
                    'description': description
                }
            )
        
        print(f"✓ Successfully updated {LoanProduct.objects.count()} loan products:")
        print("  - Boost (1 month, 20% interest, 5% processing)")
        print("  - Mwamba (3 months, 20% interest, 5% processing)")
        print("  - Imara (6 months, 10% interest, 5% processing)")
        print("✓ Updated loan product system settings")
        
    except Exception as e:
        print(f"❌ Error setting up loan products: {e}")
        return False
    
    return True
setup_loan_products()
