<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

class ClienteTest extends TestCase
{
    use RefreshDatabase;

    public function test_pode_criar_um_cliente()
    {
        // Primeiro, criamos uma empresa para associar ao cliente
        $empresaData = [
            'nome' => 'Empresa Teste',
            'cnpj' => '12345678000199',
            'email' => 'empresa@teste.com',
            'telefone' => '11999999999'
        ];

        $empresaResponse = $this->postJson('/api/empresas', $empresaData);
        $empresaId = $empresaResponse->json('data.id');

        $clienteData = [
            'nome' => 'João da Silva',
            'email' => 'joao@example.com',
            'telefone' => '11999999999',
            'cpf' => '12345678900',
            'empresa_id' => $empresaId
        ];

        $response = $this->postJson('/api/clientes', $clienteData);

        $response->assertStatus(201)
                ->assertJsonStructure([
                    'data' => [
                        'id',
                        'nome',
                        'email',
                        'telefone',
                        'cpf',
                        'empresa_id',
                        'created_at',
                        'updated_at'
                    ],
                    'message'
                ]);

        $this->assertDatabaseHas('clientes', [
            'nome' => 'João da Silva',
            'email' => 'joao@example.com',
            'cpf' => '12345678900',
            'empresa_id' => $empresaId
        ]);
    }

    public function test_nao_pode_criar_cliente_com_dados_invalidos()
    {
        $clienteData = [
            'nome' => '',
            'email' => 'email-invalido',
            'telefone' => '',
            'cpf' => '123',
            'empresa_id' => 999 // empresa que não existe
        ];

        $response = $this->postJson('/api/clientes', $clienteData);

        $response->assertStatus(422)
                ->assertJsonValidationErrors(['nome', 'email', 'telefone', 'cpf', 'empresa_id']);
    }

    public function test_nao_pode_criar_cliente_com_cpf_duplicado()
    {
        // Primeiro, criamos uma empresa
        $empresaData = [
            'nome' => 'Empresa Teste',
            'cnpj' => '12345678000199',
            'email' => 'empresa@teste.com',
            'telefone' => '11999999999'
        ];

        $empresaResponse = $this->postJson('/api/empresas', $empresaData);
        $empresaId = $empresaResponse->json('data.id');

        // Dados do primeiro cliente
        $clienteData = [
            'nome' => 'João da Silva',
            'email' => 'joao@example.com',
            'telefone' => '11999999999',
            'cpf' => '12345678900',
            'empresa_id' => $empresaId
        ];

        // Criamos o primeiro cliente
        $this->postJson('/api/clientes', $clienteData);

        // Tentamos criar outro cliente com o mesmo CPF
        $clienteData2 = $clienteData;
        $clienteData2['email'] = 'outro@email.com';

        $response = $this->postJson('/api/clientes', $clienteData2);

        $response->assertStatus(422)
                ->assertJsonValidationErrors(['cpf']);
    }
} 