/*
  # Create API Keys Table

  1. New Tables
    - `api_keys`
      - `id` (uuid, primary key)
      - `nombre` (text) - Nombre descriptivo del proveedor
      - `api_key` (text, unique) - La API key generada
      - `api_secret` (text) - Secret hash para validación
      - `proveedor` (text) - Nombre del proveedor (disashop, etc)
      - `activo` (boolean) - Si la key está activa
      - `limite_requests_dia` (integer) - Límite de requests por día
      - `requests_realizados_hoy` (integer) - Contador de requests del día
      - `ultima_fecha_reset` (date) - Fecha del último reset del contador
      - `ultimo_uso` (timestamptz) - Última vez que se usó la key
      - `ip_whitelist` (text) - IPs permitidas (opcional, separadas por coma)
      - `metadata` (jsonb) - Datos adicionales
      - `created_at` (timestamptz)
      - `updated_at` (timestamptz)

  2. Security
    - Enable RLS on `api_keys` table
    - Only admin users can manage API keys
    - API keys are used for external authentication, not subject to RLS in normal flow

  3. Indexes
    - Index on `api_key` for fast lookups
    - Index on `activo` for filtering active keys
*/

CREATE TABLE IF NOT EXISTS api_keys (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  nombre text NOT NULL,
  api_key text UNIQUE NOT NULL,
  api_secret text NOT NULL,
  proveedor text NOT NULL,
  activo boolean DEFAULT true,
  limite_requests_dia integer DEFAULT 10000,
  requests_realizados_hoy integer DEFAULT 0,
  ultima_fecha_reset date DEFAULT CURRENT_DATE,
  ultimo_uso timestamptz,
  ip_whitelist text,
  metadata jsonb DEFAULT '{}',
  created_at timestamptz DEFAULT now(),
  updated_at timestamptz DEFAULT now()
);

CREATE INDEX IF NOT EXISTS idx_api_keys_api_key ON api_keys(api_key);
CREATE INDEX IF NOT EXISTS idx_api_keys_activo ON api_keys(activo);
CREATE INDEX IF NOT EXISTS idx_api_keys_proveedor ON api_keys(proveedor);

ALTER TABLE api_keys ENABLE ROW LEVEL SECURITY;

CREATE POLICY "Admin can manage api_keys"
  ON api_keys
  FOR ALL
  TO authenticated
  USING (true)
  WITH CHECK (true);

CREATE TABLE IF NOT EXISTS api_requests_log (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  api_key_id uuid REFERENCES api_keys(id) ON DELETE CASCADE,
  endpoint text NOT NULL,
  metodo text NOT NULL,
  ip_address text,
  user_agent text,
  response_status integer,
  response_time_ms integer,
  error_message text,
  request_data jsonb,
  created_at timestamptz DEFAULT now()
);

CREATE INDEX IF NOT EXISTS idx_api_requests_log_api_key_id ON api_requests_log(api_key_id);
CREATE INDEX IF NOT EXISTS idx_api_requests_log_created_at ON api_requests_log(created_at);

ALTER TABLE api_requests_log ENABLE ROW LEVEL SECURITY;

CREATE POLICY "Admin can view api_requests_log"
  ON api_requests_log
  FOR SELECT
  TO authenticated
  USING (true);
