// @ts-nocheck
import { supabase } from './supabase'

// ============================================
// TEMPLATES MUTATIONS
// ============================================

export const createTemplate = async (data: {
  nome: string
  tipo: 'novo' | 'derivado'
  template_pai_id?: string | null
  topicos_selecionados: string[]
  descricao?: string
}) => {
  const { data: result, error } = await supabase
    .from('templates_customizados')
    .insert([
      {
        nome: data.nome,
        tipo: data.tipo,
        template_pai_id: data.template_pai_id || null,
        topicos_selecionados: data.topicos_selecionados,
        total_topicos: data.topicos_selecionados.length,
        total_obrigatorios: data.topicos_selecionados.length, // TODO: calcular corretamente
        descricao: data.descricao || null,
        ativo: true,
      } as any,
    ])
    .select()

  if (error) throw error
  return result?.[0]
}

export const updateTemplate = async (
  id: string,
  data: {
    nome?: string
    topicos_selecionados?: string[]
    descricao?: string
  }
) => {
  const { data: result, error } = await supabase
    .from('templates_customizados')
    .update({
      ...data,
      total_topicos: data.topicos_selecionados?.length,
    } as any)
    .eq('id', id)
    .select()

  if (error) throw error
  return result?.[0]
}

export const deleteTemplate = async (id: string) => {
  const { error } = await supabase
    .from('templates_customizados')
    .update({ ativo: false } as any)
    .eq('id', id)

  if (error) throw error
}

// ============================================
// DATABOOKS MUTATIONS
// ============================================

export const createDatabook = async (data: {
  numero_projeto: string
  nome_projeto: string
  cliente_id?: string | null
  template_id?: string | null
  cliente_nome: string
  cliente_contato: string
  cliente_email: string
  cliente_telefone: string
  produto_nome: string
  produto_tipo: string
  produto_descricao: string
  produto_normas: string[]
  ordem_compra: string
  data_inicio: string
  data_entrega_prevista: string
  titulo_principal: string
  subtitulo: string
  cor_primaria: string
  cor_secundaria: string
  tamanho_pagina: 'A4' | 'Letter'
  orientacao: 'retrato' | 'paisagem'
}) => {
  // Criar projeto
  const { data: projeto, error: projetoError } = await supabase
    .from('projetos')
    .insert([
      {
        numero_projeto: data.numero_projeto,
        nome_projeto: data.nome_projeto,
        cliente_id: data.cliente_id || null,
        template_id: data.template_id || null,
        status: 'rascunho',
        progresso_percentual: 0,
      } as any,
    ])
    .select()

  if (projetoError) throw projetoError

  const projetoId = projeto?.[0]?.id

  // Criar databook_mestre
  const { data: databook, error: databookError } = await supabase
    .from('databooks_mestres')
    .insert([
      {
        projeto_id: projetoId,
        cliente_nome: data.cliente_nome,
        cliente_contato: data.cliente_contato,
        cliente_email: data.cliente_email,
        cliente_telefone: data.cliente_telefone,
        produto_nome: data.produto_nome,
        produto_tipo: data.produto_tipo,
        produto_descricao: data.produto_descricao,
        produto_normas: data.produto_normas,
        numero_projeto: data.numero_projeto,
        ordem_compra: data.ordem_compra,
        data_inicio: data.data_inicio,
        data_entrega_prevista: data.data_entrega_prevista,
        titulo_principal: data.titulo_principal,
        subtitulo: data.subtitulo,
        cor_primaria: data.cor_primaria,
        cor_secundaria: data.cor_secundaria,
        tamanho_pagina: data.tamanho_pagina,
        orientacao: data.orientacao,
      } as any,
    ])
    .select()

  if (databookError) throw databookError

  return { projeto: projeto?.[0], databook: databook?.[0] }
}

export const updateDatabook = async (
  projetoId: string,
  data: {
    nome_projeto?: string
    status?: string
    progresso_percentual?: number
  }
) => {
  const { data: result, error } = await supabase
    .from('projetos')
    .update(data as any)
    .eq('id', projetoId)
    .select()

  if (error) throw error
  return result?.[0]
}

export const deleteDatabook = async (projetoId: string) => {
  const { error } = await supabase
    .from('projetos')
    .delete()
    .eq('id', projetoId)

  if (error) throw error
}

// ============================================
// CLIENTES MUTATIONS
// ============================================

export const createCliente = async (data: {
  nome: string
  contato?: string
  email?: string
  telefone?: string
}) => {
  const { data: result, error } = await supabase
    .from('clientes')
    .insert([
      {
        nome: data.nome,
        contato: data.contato || null,
        email: data.email || null,
        telefone: data.telefone || null,
        ativo: true,
      } as any,
    ])
    .select()

  if (error) throw error
  return result?.[0]
}

export const updateCliente = async (
  id: string,
  data: {
    nome?: string
    contato?: string
    email?: string
    telefone?: string
  }
) => {
  const { data: result, error } = await supabase
    .from('clientes')
    .update(data as any)
    .eq('id', id)
    .select()

  if (error) throw error
  return result?.[0]
}

export const deleteCliente = async (id: string) => {
  const { error } = await supabase
    .from('clientes')
    .update({ ativo: false } as any)
    .eq('id', id)

  if (error) throw error
}
