from django.core.management.base import BaseCommand
from django.db import connection

class Command(BaseCommand):
    help = 'Fix foreign key constraints pointing to auth_user_old'

    def handle(self, *args, **options):
        constraints = [
            ('invoice_history', 'invoice_history_user_id_8719f3fe_fk_auth_user_id', 'user_id'),
            ('auth_user_user_permissions', 'auth_user_user_permissions_user_id_a95ead1b_fk', 'user_id'),
            ('invoices', 'invoices_created_by_id_ae2b3bef_fk_auth_user_id', 'created_by_id'),
            ('sales_creditlimithistory', 'sales_creditlimithistory_changed_by_id_dbea25f4_fk', 'changed_by_id'),
            ('email_logs', 'email_logs_sent_by_id_75652daa_fk_auth_user_id', 'sent_by_id'),
            ('sales_quotefollowup', 'sales_quotefollowup_followed_up_by_id_7a55e92c_fk', 'followed_up_by_id'),
            ('business_businessmembership', 'business_businessmembership_invited_by_id_b963f0db_fk', 'invited_by_id'),
            ('business_businessmembership', 'business_businessmembership_status_changed_by_id_5f8c3a21_fk', 'status_changed_by_id'),
            ('business_businessmembership', 'business_businessmembership_user_id_63d0eaa7_fk', 'user_id'),
            ('credit_notes', 'credit_notes_approved_by_id_d4aae08b_fk_auth_user_id', 'approved_by_id'),
            ('credit_notes', 'credit_notes_created_by_id_eb35d5c6_fk_auth_user_id', 'created_by_id'),
            ('sales_creditledger', 'sales_creditledger_created_by_id_52a03471_fk', 'created_by_id'),
            ('inventory_cyclecount', 'inventory_cyclecount_assigned_to_id_4b460df0_fk', 'assigned_to_id'),
            ('inventory_cyclecount', 'inventory_cyclecount_created_by_id_b10203d9_fk', 'created_by_id'),
            ('report_templates', 'report_templates_created_by_id_a75b451c_fk_auth_user_id', 'created_by_id'),
            ('sales_paymentplan', 'sales_paymentplan_created_by_id_90f6c8d7_fk', 'created_by_id'),
            ('documents_generated', 'documents_generated_generated_by_id_9e45a1d7_fk_auth_user_id', 'generated_by_id'),
            ('inventory_csvimportsession', 'inventory_csvimportsession_created_by_id_926aaad5_fk', 'created_by_id'),
            ('credit_note_applications', 'credit_note_applications_applied_by_id_8db52980_fk', 'applied_by_id'),
            ('inventory_inventorybatch', 'inventory_inventorybatch_processed_by_id_47edeb8b_fk', 'processed_by_id'),
            ('quotes', 'quotes_created_by_id_ddb872b0_fk_auth_user_id', 'created_by_id'),
            ('sales_quote', 'sales_quote_created_by_id_4372fbca_fk', 'created_by_id'),
            ('django_admin_log', 'django_admin_log_user_id_c564eba6_fk', 'user_id'),
            ('warranty_warrantyticket', 'warranty_warrantyticket_assigned_technician_id_2a8f9bb7_fk', 'assigned_technician_id'),
            ('warranty_warrantyticket', 'warranty_warrantyticket_created_by_id_e44536ca_fk', 'created_by_id'),
            ('sales_salereturn', 'sales_salereturn_processed_by_id_df5f4eef_fk', 'processed_by_id'),
            ('accounting_journalentry', 'accounting_journalentry_created_by_id_60f500e8_fk', 'created_by_id'),
            ('accounting_journalentry', 'accounting_journalentry_posted_by_id_8150d0dc_fk', 'posted_by_id'),
            ('sales_cashdrawer', 'sales_cashdrawer_closed_by_id_c1bf6f23_fk', 'closed_by_id'),
            ('sales_cashdrawer', 'sales_cashdrawer_opened_by_id_0a8fa6b1_fk', 'opened_by_id'),
            ('sales_cashdrawer', 'sales_cashdrawer_reconciled_by_id_670cee44_fk', 'reconciled_by_id'),
            ('reporting_scheduledreport_recipients', 'reporting_scheduledreport_recipients_user_id_3843c336_fk', 'user_id'),
            ('notifications_notification', 'notifications_notification_recipient_id_d055f3f0_fk', 'recipient_id'),
            ('inventory_cyclecountitem', 'inventory_cyclecountitem_counted_by_id_964f8419_fk', 'counted_by_id'),
            ('warranty_warranty', 'warranty_warranty_created_by_id_11a18bb0_fk_auth_user_id', 'created_by_id'),
            ('inventory_stockreservation', 'inventory_stockreservation_reserved_by_id_f4684c07_fk', 'reserved_by_id'),
            ('sales_cashdrawerauditlog', 'sales_cashdrawerauditlog_performed_by_id_9426defb_fk', 'performed_by_id'),
            ('invitation_tokens', 'invitation_tokens_invited_by_id_0880ecd6_fk', 'invited_by_id'),
            ('warranty_warrantyextension', 'warranty_warrantyextension_extended_by_id_ec53ce90_fk', 'extended_by_id'),
            ('auth_user_groups', 'auth_user_groups_user_id_6a12ed8b_fk', 'user_id'),
            ('reporting_financialreport', 'reporting_financialreport_created_by_id_3acbe985_fk', 'created_by_id'),
            ('documents_template', 'documents_template_created_by_id_3a39b103_fk_auth_user_id', 'created_by_id'),
            ('user_profiles', 'user_profiles_user_id_8c5ab5fe_fk', 'user_id'),
            ('sales_sale', 'sales_sale_salesperson_id_1258e2e1_fk', 'salesperson_id'),
            ('inventory_transferrequest', 'inventory_transferrequest_approved_by_id_95c417f9_fk', 'approved_by_id'),
            ('inventory_transferrequest', 'inventory_transferrequest_requested_by_id_74ce3e56_fk', 'requested_by_id'),
            ('sales_credittransaction', 'sales_credittransaction_created_by_id_00307fde_fk', 'created_by_id'),
            ('business', 'business_owner_id_c60b02cb_fk', 'owner_id'),
            ('invoice_payments', 'invoice_payments_recorded_by_id_824e165f_fk_auth_user_id', 'recorded_by_id'),
            ('sales_customer', 'sales_customer_credit_approved_by_id_b24a018c_fk', 'credit_approved_by_id'),
            ('sales_cashdrawertransaction', 'sales_cashdrawertransaction_created_by_id_2fc354dd_fk', 'created_by_id'),
            ('warranty_warrantyticketupdate', 'warranty_warrantyticketupdate_created_by_id_745380c5_fk', 'created_by_id'),
            ('audit_logs', 'audit_logs_user_id_752b0e2b_fk', 'user_id'),
            ('sales_commission', 'sales_commission_salesperson_id_16d022ac_fk', 'salesperson_id'),
            ('notifications_notificationpreference', 'notifications_notifi_user_id_7cfb3d3a_fk_auth_user', 'user_id'),
        ]
        
        self.stdout.write(self.style.WARNING(f'Starting foreign key constraint fixes...'))
        self.stdout.write(self.style.WARNING(f'Total constraints to fix: {len(constraints)}'))
        self.stdout.write('')
        
        success_count = 0
        error_count = 0
        
        with connection.cursor() as cursor:
            for table, constraint, column in constraints:
                try:
                    self.stdout.write(f'Fixing {table}.{column}...')
                    
                    # Drop old constraint
                    cursor.execute(f'ALTER TABLE `{table}` DROP FOREIGN KEY `{constraint}`')
                    
                    # Add new constraint pointing to auth_user
                    cursor.execute(f'ALTER TABLE `{table}` ADD CONSTRAINT `{constraint}` FOREIGN KEY (`{column}`) REFERENCES `auth_user` (`id`)')
                    
                    self.stdout.write(self.style.SUCCESS(f'  ✓ Fixed {table}.{column}'))
                    success_count += 1
                    
                except Exception as e:
                    self.stdout.write(self.style.ERROR(f'  ✗ Error fixing {table}.{column}: {str(e)}'))
                    error_count += 1
        
        # Summary
        self.stdout.write('')
        self.stdout.write(self.style.SUCCESS('='*60))
        self.stdout.write(self.style.SUCCESS('FOREIGN KEY FIX SUMMARY'))
        self.stdout.write(self.style.SUCCESS('='*60))
        self.stdout.write(f'Total constraints: {len(constraints)}')
        self.stdout.write(self.style.SUCCESS(f'Successfully fixed: {success_count}'))
        if error_count > 0:
            self.stdout.write(self.style.ERROR(f'Errors: {error_count}'))
        else:
            self.stdout.write(self.style.SUCCESS('All constraints fixed successfully!'))
        self.stdout.write('')