<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class PedidosTable extends AbstractMigration
{
    public function change(): void
    {
        $table = $this->table('pedidos');
        $table
            ->addColumn('tienda_id', 'integer', ['signed' => false])
            ->addColumn('repartidor_id', 'integer', ['null' => true, 'signed' => false])
            ->addColumn('cliente_nombre', 'string', ['limit' => 150])
            ->addColumn('cliente_telefono', 'string', ['limit' => 30, 'null' => true])
            ->addColumn('direccion_origen', 'string', ['limit' => 255])
            ->addColumn('origen_lat', 'decimal', ['precision' => 10, 'scale' => 7])
            ->addColumn('origen_lng', 'decimal', ['precision' => 10, 'scale' => 7])
            ->addColumn('direccion_destino', 'string', ['limit' => 255])
            ->addColumn('destino_lat', 'decimal', ['precision' => 10, 'scale' => 7])
            ->addColumn('destino_lng', 'decimal', ['precision' => 10, 'scale' => 7])
            ->addColumn('costo_envio', 'decimal', ['precision' => 10, 'scale' => 2])
            ->addColumn('estado', 'enum', [
                'values' => ['creado', 'recoleccion', 'transito', 'entrega', 'cerrado', 'cancelado'],
                'default' => 'creado',
            ])
            ->addColumn('token_publico', 'string', ['limit' => 64])
            ->addColumn('recolectado_at', 'timestamp', ['null' => true])
            ->addColumn('transito_at', 'timestamp', ['null' => true])
            ->addColumn('entregado_at', 'timestamp', ['null' => true])
            ->addColumn('cerrado_at', 'timestamp', ['null' => true])
            ->addColumn('cancelado_at', 'timestamp', ['null' => true])
            ->addColumn('created_at', 'timestamp', ['default' => 'CURRENT_TIMESTAMP'])
            ->addColumn('updated_at', 'timestamp', ['null' => true, 'update' => 'CURRENT_TIMESTAMP'])
            ->addForeignKey('tienda_id', 'tiendas', 'id', ['delete' => 'RESTRICT', 'update' => 'CASCADE'])
            ->addForeignKey('repartidor_id', 'repartidores', 'id', ['delete' => 'SET_NULL', 'update' => 'CASCADE'])
            ->addIndex(['token_publico'], ['unique' => true])
            ->addIndex(['estado'])
            ->create();
    }
}
