/*
  # Crear tabla de planes

  1. Nueva Tabla
    - `planes`
      - `id` (uuid, primary key) - Identificador único
      - `cd_tipo_plan` (integer, unique, not null) - Código del plan en Dominicana de Seguros
      - `descripcion` (text, not null) - Descripción del plan
      - `tipo_vehiculo` (text, not null) - Tipo: 'motocicleta' o 'automovil'
      - `vigencia_meses` (integer, not null) - Vigencia en meses (6 o 12)
      - `tipo_cobertura` (text, not null) - Tipo: 'basico' o 'ampliado'
      - `visible` (boolean, default true) - Si el plan está visible para los usuarios
      - `orden` (integer, default 0) - Orden de visualización
      - `created_at` (timestamptz, default now())
      - `updated_at` (timestamptz, default now())

  2. Seguridad
    - Enable RLS
    - Políticas restrictivas para lectura pública de planes visibles
    - Políticas de administración solo para usuarios autenticados
*/

-- Crear tabla de planes
CREATE TABLE IF NOT EXISTS planes (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  cd_tipo_plan integer UNIQUE NOT NULL,
  descripcion text NOT NULL,
  tipo_vehiculo text NOT NULL CHECK (tipo_vehiculo IN ('motocicleta', 'automovil')),
  vigencia_meses integer NOT NULL CHECK (vigencia_meses IN (6, 12)),
  tipo_cobertura text NOT NULL CHECK (tipo_cobertura IN ('basico', 'ampliado', 'basico_1')),
  visible boolean DEFAULT true NOT NULL,
  orden integer DEFAULT 0 NOT NULL,
  created_at timestamptz DEFAULT now() NOT NULL,
  updated_at timestamptz DEFAULT now() NOT NULL
);

-- Índices para mejorar rendimiento
CREATE INDEX IF NOT EXISTS idx_planes_tipo_vehiculo ON planes(tipo_vehiculo) WHERE visible = true;
CREATE INDEX IF NOT EXISTS idx_planes_visible ON planes(visible);
CREATE INDEX IF NOT EXISTS idx_planes_orden ON planes(orden);

-- Habilitar RLS
ALTER TABLE planes ENABLE ROW LEVEL SECURITY;

-- Política: Cualquiera puede leer planes visibles (para el API público)
CREATE POLICY "Planes visibles son públicos"
  ON planes FOR SELECT
  USING (visible = true);

-- Política: Solo lectura de todos los planes para consultas internas
CREATE POLICY "Sistema puede leer todos los planes"
  ON planes FOR SELECT
  USING (true);

-- Función para actualizar updated_at automáticamente
CREATE OR REPLACE FUNCTION update_planes_updated_at()
RETURNS TRIGGER AS $$
BEGIN
  NEW.updated_at = now();
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- Trigger para actualizar updated_at
DROP TRIGGER IF EXISTS update_planes_updated_at_trigger ON planes;
CREATE TRIGGER update_planes_updated_at_trigger
  BEFORE UPDATE ON planes
  FOR EACH ROW
  EXECUTE FUNCTION update_planes_updated_at();

-- Insertar planes iniciales basados en la respuesta del API
INSERT INTO planes (cd_tipo_plan, descripcion, tipo_vehiculo, vigencia_meses, tipo_cobertura, visible, orden)
VALUES
  (1, 'Motocicleta básico vigencia 1 año', 'motocicleta', 12, 'basico', true, 1),
  (2, 'Motocicleta ampliado vigencia 1 año', 'motocicleta', 12, 'ampliado', true, 2),
  (3, 'Automóvil básico vigencia 1 año', 'automovil', 12, 'basico', true, 3),
  (4, 'Automóvil ampliado vigencia 1 año', 'automovil', 12, 'ampliado', true, 4),
  (5, 'Motocicleta básico vigencia 6 meses', 'motocicleta', 6, 'basico', true, 5),
  (6, 'Motocicleta ampliado vigencia 6 meses', 'motocicleta', 6, 'ampliado', true, 6),
  (7, 'Automóvil básico vigencia 6 meses', 'automovil', 6, 'basico', true, 7),
  (8, 'Automóvil ampliado vigencia 6 meses', 'automovil', 6, 'ampliado', true, 8),
  (9, 'Automóvil básico 1 vigencia 1 año', 'automovil', 12, 'basico_1', true, 9),
  (10, 'Automóvil básico 1 vigencia 6 meses', 'automovil', 6, 'basico_1', true, 10)
ON CONFLICT (cd_tipo_plan) DO NOTHING;
