CREATE DATABASE IF NOT EXISTS crm CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE crm;

CREATE TABLE IF NOT EXISTS direcciones (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  calle VARCHAR(255),
  numero VARCHAR(50),
  piso VARCHAR(50),
  ciudad VARCHAR(100),
  provincia VARCHAR(100),
  codigo_postal VARCHAR(20)
);

CREATE TABLE IF NOT EXISTS propietarios (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  nombre VARCHAR(255) NOT NULL,
  telefono VARCHAR(50),
  email VARCHAR(255),
  direccion_id BIGINT,
  FOREIGN KEY (direccion_id) REFERENCES direcciones(id)
);

CREATE TABLE IF NOT EXISTS proveedores (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  nombre VARCHAR(255) NOT NULL,
  telefono VARCHAR(50),
  email VARCHAR(255),
  direccion_id BIGINT,
  FOREIGN KEY (direccion_id) REFERENCES direcciones(id)
);

CREATE TABLE IF NOT EXISTS contacto_proveedor (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  proveedor_id BIGINT NOT NULL,
  nombre VARCHAR(255) NOT NULL,
  telefono VARCHAR(50),
  email VARCHAR(255),
  FOREIGN KEY (proveedor_id) REFERENCES proveedores(id)
);

CREATE TABLE IF NOT EXISTS servicios (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  nombre VARCHAR(255) NOT NULL,
  descripcion TEXT,
  proveedor_id BIGINT,
  FOREIGN KEY (proveedor_id) REFERENCES proveedores(id)
);

CREATE TABLE IF NOT EXISTS inmuebles (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  referencia_catastral VARCHAR(255) UNIQUE,
  descripcion TEXT,
  precio DECIMAL(15,2),
  estado VARCHAR(100),
  direccion_id BIGINT,
  propietario_id BIGINT,
  FOREIGN KEY (direccion_id) REFERENCES direcciones(id),
  FOREIGN KEY (propietario_id) REFERENCES propietarios(id)
);

CREATE TABLE IF NOT EXISTS contratos (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  inmueble_id BIGINT NOT NULL,
  propietario_id BIGINT NOT NULL,
  tipo VARCHAR(50),
  fecha_inicio DATE,
  fecha_fin DATE,
  importe DECIMAL(15,2),
  estado VARCHAR(50),
  cliente_nombre VARCHAR(255),
  FOREIGN KEY (inmueble_id) REFERENCES inmuebles(id),
  FOREIGN KEY (propietario_id) REFERENCES propietarios(id)
);

CREATE TABLE IF NOT EXISTS compran (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  inmueble_id BIGINT NOT NULL,
  comprador_nombre VARCHAR(255),
  fecha_compra DATE,
  precio_compra DECIMAL(15,2),
  FOREIGN KEY (inmueble_id) REFERENCES inmuebles(id)
);

CREATE TABLE IF NOT EXISTS alquilados (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  inmueble_id BIGINT NOT NULL,
  inquilino_nombre VARCHAR(255),
  fecha_inicio DATE,
  fecha_fin DATE,
  renta_mensual DECIMAL(15,2),
  FOREIGN KEY (inmueble_id) REFERENCES inmuebles(id)
);

CREATE TABLE IF NOT EXISTS users (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(255) NOT NULL UNIQUE,
  password VARCHAR(255) NOT NULL,
  role VARCHAR(50) NOT NULL,
  enabled BOOLEAN NOT NULL DEFAULT TRUE
);