<?php

namespace Database\Seeders;

use App\Models\Carrier;
use Illuminate\Database\Seeder;

class CarrierSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        // Delhivery - use firstOrNew so we set api_keys before any insert
        $delhivery = Carrier::firstOrNew(['slug' => 'delhivery']);
        $delhivery->name = 'Delhivery';
        $delhivery->enabled = true;
        $delhivery->process_type = $delhivery->process_type ?? Carrier::PROCESS_TYPE_AUTOMATIC;
        $delhivery->setApiKeys([
            'api_token' => config('services.delhivery.api_token', ''),
            'api_url' => config('services.delhivery.api_url', 'https://staging-express.delhivery.com'),
            'warehouse_pin' => config('services.delhivery.warehouse_pin', ''),
            'city' => config('services.delhivery.city', ''),
            'phone' => config('services.delhivery.phone', ''),
            'address_line1' => config('services.delhivery.address_line1', ''),
            'state' => config('services.delhivery.state', ''),
            'pickup_name' => config('services.delhivery.pickup_name', ''),
        ]);
        $delhivery->config_schema = [
            [
                'name' => 'payment_mode',
                'type' => 'select',
                'label' => 'Payment Mode',
                'required' => true,
                'options' => [
                    ['value' => 'Prepaid', 'label' => 'Prepaid'],
                    ['value' => 'COD', 'label' => 'Cash on Delivery'],
                ],
            ],
            [
                'name' => 'cod_amount',
                'type' => 'number',
                'label' => 'COD Amount',
                'required' => false,
                'placeholder' => '0',
            ],
            [
                'name' => 'weight',
                'type' => 'number',
                'label' => 'Weight (grams)',
                'required' => false,
                'placeholder' => '500',
            ],
            [
                'name' => 'shipping_mode',
                'type' => 'select',
                'label' => 'Shipping Mode',
                'required' => false,
                'options' => [
                    ['value' => 'Surface', 'label' => 'Surface'],
                    ['value' => 'Air', 'label' => 'Air'],
                ],
            ],
        ];
        $delhivery->save();

        // XpressBees - use firstOrNew so we set api_keys before any insert
        $expressbees = Carrier::firstOrNew(['slug' => 'expressbees']);
        $expressbees->name = 'XpressBees';
        $expressbees->enabled = false;
        $expressbees->process_type = $expressbees->process_type ?? Carrier::PROCESS_TYPE_AUTOMATIC;
        $expressbees->setApiKeys([
            'api_token' => '',
            'api_url' => 'https://apiv2.expressbees.com',
            'pickup_pincode' => '',
        ]);
        $expressbees->config_schema = [
            [
                'name' => 'payment_mode',
                'type' => 'select',
                'label' => 'Payment Mode',
                'required' => true,
                'options' => [
                    ['value' => 'Prepaid', 'label' => 'Prepaid'],
                    ['value' => 'COD', 'label' => 'Cash on Delivery'],
                ],
            ],
            [
                'name' => 'cod_amount',
                'type' => 'number',
                'label' => 'COD Amount',
                'required' => false,
                'placeholder' => '0',
            ],
            [
                'name' => 'weight',
                'type' => 'number',
                'label' => 'Weight (grams)',
                'required' => false,
                'placeholder' => '500',
            ],
        ];
        $expressbees->save();

        // India Postal - use firstOrNew so we set api_keys before any insert
        $indiapost = Carrier::firstOrNew(['slug' => 'indiapost']);
        $indiapost->name = 'India Postal';
        $indiapost->enabled = false;
        $indiapost->process_type = $indiapost->process_type ?? Carrier::PROCESS_TYPE_AUTOMATIC;
        $indiapost->setApiKeys([
            'api_token' => '',
            'api_url' => 'https://api.indiapost.gov.in',
            'from_pincode' => '',
            'from_name' => '',
            'from_address' => '',
            'from_city' => '',
            'from_state' => '',
            'from_phone' => '',
        ]);
        $indiapost->config_schema = [
            [
                'name' => 'booking_type',
                'type' => 'select',
                'label' => 'Booking Type',
                'required' => true,
                'options' => [
                    ['value' => 'Parcel', 'label' => 'Parcel'],
                    ['value' => 'Registered', 'label' => 'Registered'],
                ],
            ],
            [
                'name' => 'payment_mode',
                'type' => 'select',
                'label' => 'Payment Mode',
                'required' => true,
                'options' => [
                    ['value' => 'Prepaid', 'label' => 'Prepaid'],
                    ['value' => 'COD', 'label' => 'Cash on Delivery'],
                ],
            ],
            [
                'name' => 'cod_amount',
                'type' => 'number',
                'label' => 'COD Amount',
                'required' => false,
                'placeholder' => '0',
            ],
            [
                'name' => 'weight',
                'type' => 'number',
                'label' => 'Weight (grams)',
                'required' => false,
                'placeholder' => '500',
            ],
        ];
        $indiapost->save();

        // Other (manual only) - use firstOrNew so we set api_keys before any insert
        $other = Carrier::firstOrNew(['slug' => 'other']);
        $other->name = 'Other';
        $other->enabled = false;
        $other->process_type = Carrier::PROCESS_TYPE_MANUAL;
        $other->setApiKeys([]);
        $other->config_schema = null;
        $other->save();

        $this->command->info('Carriers seeded successfully!');
    }
}
